Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C# / VB.NET - Proprietà di proprietà
Forum - C# / VB.NET - Proprietà di proprietà

Avatar
Phil93 (Normal User)
Pro


Messaggi: 85
Iscritto: 26/01/2011

Segnala al moderatore
Postato alle 18:18
Martedì, 01/03/2011
Salve a tutti.
Come faccio a creare proprietà "nidificate"? Per esempio:

TextBox1.Text
TextBox1.Text.Length

Più precisamente, dovrei far esporre una proprietà alla proprietà "Message" di una classe che eredita da Exception.

Cosa devo mettere in questo blocco?

Codice sorgente - presumibilmente VB.NET

  1. Public Overrides ReadOnly Property Message As String
  2.         Get
  3.             Return "Process failed."
  4.         End Get    
  5.     End Property



Grazie.

PM
Avatar
Il Totem (Admin)
Guru^2


Messaggi: 3635
Iscritto: 24/01/2006

Up
1
Down
V
Segnala al moderatore
Postato alle 11:54
Mercoledì, 02/03/2011
No, non è quello che vuole fare, presumo.

Nel tuo esempio TextBox1 è un oggetto di tipo TextBox, il quale espone la proprietà Text, che contiene un oggetto di tipo stringa. Tutte le stringhe dispongono della proprietà Length; quindi, come ha detto HeDo, il concetto che hai di proprietà nidificate è sbagliato. Non esistono cose del genere. Esistono solo proprietà che restituiscono altri oggetti con altre proprietà.
Esempio:
Codice sorgente - presumibilmente C++

  1. class Person
  2. {
  3.     public Person Father { get; set; }
  4.     public Person Mother { get; set; }
  5.     public Person Mate { get; set; }
  6.     public List<Person> Children { get; set; }
  7.  
  8.     // ...
  9. }
  10.  
  11. // Assumendo che non esistano oggetti nulli:
  12. Person mySelf = new Person("Mario", "Rossi", "6/7/1980");
  13. // ...
  14.  
  15. // Ecco il comportamento che chiami proprietà nidificate:
  16. Person grandFather = mySelf.Father.Father; // nonno
  17. Person motherInLaw = mySelf.Mate.Mother; // suocera
  18. Person nephew = mySelf.Father.Children[1].Children[0]; // nipote (di zio)


Ok grazie. Ora ti chiedo: nel mio caso ho una classe che eredita da Exception, e voglio che esponga una proprietà Messages (array di stringhe) i cui elementi espongono una proprietà Line che indica la riga di codice in cui l'eccezione si è verificata. - Phil93 - 02/03/11 15:43
Come faccio a far esporre quest'ultima proprietà a "Messages"? Creo una Classe Message che eredita da String? - Phil93 - 02/03/11 15:44
Correggo l'ultima frase: classe Message che si serve di una string e una proprietà Lines. Dimenticavo che String è NonInheritable - Phil93 - 02/03/11 16:53
PM
Avatar
HeDo (Founder Member)
Guru^2


Messaggi: 2765
Iscritto: 21/09/2007

Up
-1
Down
V
Segnala al moderatore
Postato alle 18:39
Martedì, 01/03/2011

Allora, quelle che tu chiami "proprietà di proprietà" o "proprietà nidificate" altro non sono che proprietà (o campi) di oggetti che sono proprietà di un oggetto.

Quello che vuoi fare te si può implementare molto semplicemente ereditando dalla classe Exception e implementando un opportuno costruttore:

Codice sorgente - presumibilmente VB.NET

  1. Class MyException
  2.         Inherits Exception
  3.         Public Sub New()
  4.                 MyBase.New("Process Failed")
  5.         End Sub
  6. End Class



in questo modo potrai sollevare l'eccezione MyException senza doverti preoccupare del message, perchè verrà visualizzato "Process Failed":

Codice sorgente - presumibilmente C# / VB.NET

  1. Throw New MyException()



in alternativa potevi fare qualcosa di questo genere:

Codice sorgente - presumibilmente C# / VB.NET

  1. Throw New Exception("Process Failed")


Così mi evito di overridare la proprietà Message, ok. Ma non mi è ancora chiaro come far esporre a delle proprietà (non necessariamente ereditate da System.Exception) altre proprietà. - Phil93 - 01/03/11 18:53
puoi usare i metodi di estensione, ma credo che non sia esattamente quello che vuoi fare: http://en.wikipedia.org/wiki/Extension_method - HeDo - 02/03/11 00:29
PM