Autor Beitrag
alzaimar
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2889
Erhaltene Danke: 13

W2000, XP
D6E, BDS2006A, DevExpress
BeitragVerfasst: Di 04.11.08 14:25 
Ahoj die Herren,

Ich möchte eine Methode aufrufen, wobei die Instanz auch null sein darf. Geht das?
Also, sowas hier:

ausblenden 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?

_________________
Na denn, dann. Bis dann, denn.
JüTho
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2021
Erhaltene Danke: 6

Win XP Prof
C# 2.0 (#D für NET 2.0, dazu Firebird); früher Delphi 5 und Delphi 2005 Pro
BeitragVerfasst: 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.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: Di 04.11.08 15:17 
Es geht auf jeden Fall mittels einer Extension Method:
ausblenden 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:
ausblenden C#-Quelltext
1:
2:
MyClass o = null;
Label1.Text = o.Method();

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
Kha
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3803
Erhaltene Danke: 176

Arch Linux
Python, C, C++ (vim)
BeitragVerfasst: 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.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: Di 04.11.08 16:38 
user profile iconKha hat folgendes geschrieben Zum zitierten Posting springen:
AFAIK :gruebel: ist dem bei Oxygene nicht so.
Stimmt, das hier gibt "Ich bin nil" aus:
ausblenden 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;

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".