User
オブジェクトに1つのメソッドSerializeUser()
を定義すると、それが静的でない限り、User.SerializeUser()
に電話をかけることはできません。 がの静的であれば、new User().SerializeUser()
を実行することはできません。同じ名前かどうかの2つの方法でしか実行できません。また、コンパイラが解決できるようにシグネチャを区別すれば同じ名前を持つことができますどちらを使うか。
インスタンスメソッドは、静的メソッドの引数としてインスタンスを渡し、静的メソッドは、パラメータとしてインスタンスを受け入れ、すなわち場合はががしたいのだ何かがあるとして、これは理にかなっている唯一の方法:
デフォルト値のブール値やデフォルト値を使用しないなど、別の方法で区別することもできます。 Ex。静的メソッドにbool flag = false
パラメータがある場合、インスタンスメソッドはflag = true
で呼び出すことができ、動作を区別することができます。これは、面倒なオーバーロード解決の背後にあるメソッドを隠すので、やや厄介なコードです。
あなたの質問に直接答えるには、現在の方法がMethodBase.GetCurrentMethod().IsStatic
で静的であるかどうかを確認することができますが、実際にはこのような状況であなたが使用するとは思われません。あなたのコードを見てみると
は、しかし、私はあなたが欲しいものを想像することはこれです:
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.
}
}
}
あなたは、これらを別の名前を付けることができ...?!しかし、いいえ、あなたの例で示したコードを書くことはできません。親切に*あなたがそのような忌み嫌いをしたい理由を説明してください! –
静的でない 'SerializeUser'と静的' SerializeUser'を同じクラスに持つことはできません。しかし、なぜあなたはこれをしたいですか? – Amy
「チェック」とはどういう意味ですか?最初のサンプルは 'static'メソッドを呼び出し、2番目のサンプルはインスタンスメソッドを呼び出します。 (注:コンパイラでは、それ以外は同じメソッドを使用できるとは思えませんが、誤解を招く可能性があります)。実際にここで何を達成しようとしているのかは分かりません。 – David