denke ich, was Sie verwirrend ist hier, dass, wenn Sie eine Methode definieren, SerializeUser()
auf Ihrem User
Objekt, werden Sie nicht in der Lage sein User.SerializeUser()
zu nennen, wenn sie statisch ist. Wenn es ist statische, dann werden Sie nicht in der Lage sein zu tun - Sie können nur beide mit zwei Methoden, den gleichen Namen oder nicht, und Sie können nur den gleichen Namen haben, wenn Sie ihre Signaturen unterscheiden, damit der Compiler auflösen kann welches zu verwenden.
Der einzige Weg, dieses Gefühl als etwas macht hat man tun mag, ist, wenn die Instanz-Methode die Instanz als Argument an die statischen Methode übergibt, und die statische Methode akzeptiert eine Instanz als Parameter, das heißt:
Sie können auch etwas anderes verwenden, um sie zu unterscheiden, z. B. einen booleschen Wert mit einem Standardwert oder ohne einen Standardwert. Ex. Wenn die statische Methode einen bool flag = false
Parameter hat, dann könnte die Instanzmethode sie mit flag = true
aufrufen und dann können Sie das Verhalten differenzieren. Dies ist jedoch ein etwas böser Code, da er die Methode hinter der schwierigen Überladungsauflösung versteckt.
Um Ihre Frage direkt zu beantworten, können Sie überprüfen, ob die aktuelle Methode statisch ist mit MethodBase.GetCurrentMethod().IsStatic
, aber ich denke nicht, dass das tatsächlich in dieser Situation von Nutzen sein wird.
auf den Code der Suche, aber ich stelle mir vor, was Sie wollen, ist dies:
namespace MyNamespace
{
public class User
{
public static string SerializeUser(User u = null)
{
if (u != null)
return u.SerializeUser();
else
return "something"; //default(User).SerializeUser();?
}
}
public static class UserExtensions
{
public static string SerializeUser(this User u)
{
//return however you serialize your user.
}
}
}
Sie sie anders nennen könnte ...?! Aber nein, Sie können den Code, den Sie in Ihrem Beispiel angegeben haben, nicht schreiben. Bitte erklären Sie * warum * Sie so eine Abscheulichkeit wollen! –
Sie können keinen nicht statischen 'SerializeUser' und keinen statischen' SerializeUser' für dieselbe Klasse verwenden. Aber warum willst du das machen? – Amy
Was meinst du mit "check"? Ihr erstes Beispiel ruft eine 'statische' Methode auf, Ihr zweites Beispiel ruft eine Instanzmethode auf. (Anmerkung: Ich bezweifle, dass der Compiler Ihnen ansonsten identische Methoden zulässt, aber ich könnte mich irren.) Es ist nicht wirklich klar, was Sie hier eigentlich erreichen wollen. – David