26. september 2002 - 18:27Der er
5 kommentarer og 2 løsninger
returnere Nothing fra constructor
Kan man i vb.net returnere Nothing fra en constructor. Hvorfor kunne man spoerge. Jeg har f.eks. foelgende:
Class testing Private m_txt as String
Sub New(txt as String) if Not txt.StartsWith("ge") Then 'return nothing End If m_str = str End Sub
end Class
Selvfoelgelig kan man altid lave en READONLY property der indeholder info om objektet er "korrekt oprettet", men det ville vaere smartere hvis man lige efter kreering af en ny instans kunne spoerte
if instancenavn is nothing Then MsgBox("Proev igen") End if
Du kan smide en exception (throw), som du fanger med catch/try når du opretter objektet. Det giver vel ikke rigtigt mening at returnere nothing når man opretter et objekt. Du kan jo ikke skrive If (Dim mo As New MitObjekt()) = Nothing Then [...] End If
Det er mere fordi man ser det brugt i C++ kode(jeg ved godt det ikke er det samme), hvor man returnerer en pointer til et instans af et object. Dette kan til tider vaere NULL, hvilket man tjekker efter oprettelsen.
Ikke desto mindre.... Idet der smides en exception, saa saettes variablen vel stadig til instans af objektet... eller hvordan er det lige med det?
Du er helt galt på den og skal nok lige læse et par bøger om OOP. Hvis du vil have en constructor, så er det fordi den SKAL oprette en instans af din klasse. Hvis du ønsker en metode der baseret på en parameter i nogle tilfælde opretter en instans, så skal du bruge en eller anden form for factory mekanisme, f.eks.:
Public Class MyClass Public Shared Function MyClassFactory(txt as string) As MyClass If txt.StartsWith("ge") Return New MyClass() Else Return Nothing End If End Sub End Class
Ovenstående er efter min bedste overbevisning også gældende for c++!
ja, jeg ved ikke saa meget om OOP, saa det har du helt ret i. Jeg har bare set at det bliver brugt naar man leger med IDISPATCH pointere. Jeg ved ikke hvordan det er implementeret i c++, saa det er saadan set derfor jeg spoerger.
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.