Questo sito utilizza cookies, anche di terze parti, per mostrare pubblicitÓ e servizi in linea con il tuo account. 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


"Infelici sono quelli che hanno tanto cervello da vedere la loro stupiditÓ."
(Fligende Blatter)

"Dubitare di se stessi Ŕ il primo segno d'intelligenza."
(Ugo Ojetti)
PM
Avatar
HeDo (Founder Member)
Guru^2


Messaggi: 2764
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


Ingegnere Informatico
https://ldlagency.it
PM