Registriert seit: 25. Nov 2005
Ort: München
1.909 Beiträge
Delphi 2010 Professional
|
AW: Träume, Wünsche und Wahnvorstellungen...
25. Mai 2011, 15:27
Diese ganzen XYZ-Helper, haben ja gegenüber Ex-Methods nur den Vorteil, dass man damit Properties abbilden kann.
Nö, noch einen: Man kann damit Bugs fixen.
In C# hat eine echte Methode immer Vorrang vor den Extension Methods, d.h. wenn es eine Methode gibt namens "HansWurst" und eine Extension Method, die ebenfalls "HansWurst" heißt, wird die Extension Method niemals aufgerufen, sondern jedesmal die echte Methode. Selbst, wenn sie verschiedene Signaturen haben.
Das stimmt nicht! Ich kann mich erinnern, dass Oxygene sich so verhalten hat (kA ob es das nohc tut).
Aber nicht C#. Dort gewinnt die tatsächliche Methode nur wenn die Signatur gleich ist oder besser passt.
Code:
static void Miep(this Sample instance, object untypedValue)
{
instance.Miep((int)untypedValue);
instance.SetByExMethod = true;
}
class Sample
{
public int Value { get; private set; }
public bool SetByExMethod { get; set; }
public void Miep(int newValue)
{
Value = newValue;
SetByExMethod = false;
}
}
static void Main()
{
var s = new Sample();
s.Miep(untypedValue: 1);
Debug.Assert(s.Value == 1 && s.SetByExMethod);
s.Miep(2);
Debug.Assert(s.Value == 2 && !s.SetByExMethod);
s.Miep((Object)3);
Debug.Assert(s.Value == 3 && s.SetByExMethod);
}
Robert Giesecke I’m a great believer in “Occam’s Razor,” the principle which says:
“If you say something complicated, I’ll slit your throat.”
Geändert von Elvis (25. Mai 2011 um 15:30 Uhr)
|