Entwickler-Ecke
Basistechnologien - Methode auch mit 'Null' Objekt aufrufen?
alzaimar - Di 04.11.08 14:25
Titel: Methode auch mit 'Null' Objekt aufrufen?
Ahoj die Herren,
Ich möchte eine Methode aufrufen, wobei die Instanz auch null sein darf. Geht das?
Also, sowas hier:
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13:
| public class MyClass { public string Method() { if (this == null) return "Ich bin Null"; else return "Ich bin nicht Null"; } }
MyClass o = null; Label1.Text = o.Method(); |
Hat einer einen Tipp?
JüTho - Di 04.11.08 14:56
Hallo,
die Methode muss auf jeden Fall static sein. Aber ob this mit null verglichen werden kann, habe ich dennoch Zweifel.
Jürgen
Christian S. - Di 04.11.08 15:17
Es geht auf jeden Fall mittels einer Extension Method:
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16:
| public class MyClass {
}
public static class MyClassExtension { public static string Method(this MyClass foo) { if (foo == null) return "Ich bin Null"; else return "Ich bin nicht Null"; } } |
Aufruf genauso wie im ersten Posting:
C#-Quelltext
1: 2:
| MyClass o = null; Label1.Text = o.Method(); |
Kha - Di 04.11.08 15:59
Eigentlich hat die CLR kein Problem damit, das C#-Team hatte allerdings eins ;) . Deshalb ruft C#-Code auch nicht-virtuelle Methoden mit callvirt auf, womit es nicht erst bei einem Feldzugriff sondern schon beim Aufruf selbst knallt. AFAIK :gruebel: ist dem bei Oxygene nicht so. Ansonsten wie schon beschrieben durch die Extension-Hintertür.
Christian S. - Di 04.11.08 16:38
Kha hat folgendes geschrieben : |
AFAIK :gruebel: ist dem bei Oxygene nicht so. |
Stimmt, das hier gibt "Ich bin nil" aus:
Delphi-Prism-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20:
| type ConsoleApp = class public class method Main; method DoSomething; end;
implementation
class method ConsoleApp.Main; begin var foo : ConsoleApp; foo.DoSomething; Console.ReadLine; end;
method ConsoleApp.DoSomething; begin Console.WriteLine(iif(self = nil, 'Ich bin nil', 'Ich bin nicht nil')); end; |
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!