Angesichts die folgenden 2 ErweiterungsmethodenC# Dispatching Erweiterungsmethoden auf Basis Value nicht Referenz
public static string getIDPropertyName(this object value)
{
return "ID";
}
public static string getIDPropertyName<IDType>(this EntityRestIdentityDescriber<IDType> entityIdentityDescriber)
{
return entityIdentityDescriber.propertyNameDescribingID();
}
und die folgenden 2 Anrufungen
//arrange
object test = new CustomEntityRestModelIdentity();
//test.UserName = "KKK";
//act
var actual = test.getIDPropertyName(); //calls the first extension method
var actual2 = (test as CustomEntityRestModelIdentity).getIDPropertyName(); //calls the second extension method
Wie kann ich die zweite Erweiterungsmethode, obwohl sein Referenztyp ausführen ist Objekt, aber sein Werttyp ist ein EntityRestIdentityDescriber? Ich suche statischen Polymorphismus.
Haben Sie meine, wie kann man es ohne Casting? –
Erweiterungsmethoden werden zur Kompilierungszeit ausgewählt. Sie haben bereits eine Problemumgehung in der Frage (actual2). – buffjape
@AliSheikhNezami das ist kein Test lol. Was ich versuche, ist, über Reflektion mit einem Objekt zu landen und dann getIDPropertyName aufzurufen, um die richtige Methode zur Ausführung zu erhalten, falls das Objekt EntityRestIdentityDescriber implementiert. Wenn das Objekt es nicht implementiert, wird standardmäßig die andere Methode verwendet, die die ID zurückgibt. Gibt es keine Möglichkeit, die andere Methode ohne Casting oder Vererbung aufzurufen? –