Avatar billede Lasse Novice
26. september 2002 - 18:27 Der 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

Takker paa forhaand
Avatar billede odegaard Nybegynder
26. september 2002 - 18:35 #1
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
Avatar billede Lasse Novice
26. september 2002 - 19:09 #2
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?
Avatar billede Lasse Novice
26. september 2002 - 19:13 #3
Hvis jeg f.eks skriver dette

Dim k as cMyClass

Try
  k = New cMyClass("testing")
Catch ex as Exception
End Try

If k is nothing Then
  MsgBox("Proev igen")
End If

Vil det saa virke, hvis min konstrukter ser saaledes ud:

Sub New
  Throw New Exception
End New
Avatar billede odegaard Nybegynder
26. september 2002 - 20:14 #4
Det kan jeg ikke lige overskue, men burde det ikke være:
Try
  k = New cMyClass("testing")
Catch ex as Exception
  MsgBox("Proev igen")
End Try
Avatar billede z42cool Nybegynder
26. september 2002 - 22:10 #5
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++!
Avatar billede Lasse Novice
26. september 2002 - 22:36 #6
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.

Jeg kigger lige paa det.
Avatar billede Lasse Novice
28. september 2002 - 00:29 #7
takker for hjaelpen begge.
Avatar billede Ny bruger Nybegynder

Din løsning...

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.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester

IT-JOB

Netcompany A/S

Test Consultant

Everllence

Software Engineer

AL Sydbank A/S (tidligere Arbejdernes Landsbank)

Tech Lead til Datacenter Operations

Politiets Efterretningstjeneste

Bliv IT-supporter i PET's IT Servicedesk