私はC#からこれを行うことができます:
public static void example()
{
nonstatic();
}
public void nonstatic()
{ }
この問題の回避策がある場合は、自由に提供してください。ありがとうございます
私はC#からこれを行うことができます:
public static void example()
{
nonstatic();
}
public void nonstatic()
{ }
この問題の回避策がある場合は、自由に提供してください。ありがとうございます
static
クラスのメンバーは、そのクラスのインスタンスが存在する前に呼び出すことができます。クラスのインスタンス メンバーは、そのクラスのインスタンスが存在した後にのみ呼び出すことができ、インスタンス自体からのみ呼び出すことができます。
簡単な回避策は、呼び出そうとしているタイプの新しいオブジェクトを作成することです。
new SomeClass().nonstatic();
しかし、なぜあなたはそれをしているのですか?走らせるためですか?それでは、良いコードを書いていません。あなたはただ屈服しています。より洗練された解決策を求めてみてください..または:
または、メソッドが静的である理由を自問することもできます。そうする必要がありますか?非静的にするか、他の方法にするのは害がありstatic
ますか? これらの状況は、慎重にクラスを設計することで回避できます。
完全を期すために編集する
static
静的メソッドから直接ではなく、そのオブジェクトのインスタンスを介してこのメソッドを呼び出す価値があるかもしれません。そうすれば、無意味に新しいオブジェクトを作成する必要がなくなります。これは、クラスのインスタンスがすべてのインスタンス メソッドとすべての静的メソッドにアクセスできるためです。
クラスのインスタンスを作成し、その上でメソッドを呼び出すだけです。
public class Someclass
{
public void Data1()
{
}
public static void Data2()
{
Someclass foo = new Someclass();
Someclass.Data1();
}
}
シングルトン パターンを使用してみてから、オブジェクトのインスタンスでメソッドを呼び出します
using System;
public class Singleton
{
private static Singleton instance;
private Singleton() {}
public static Singleton Instance
{
get
{
if (instance == null)
{
instance = new Singleton();
}
return instance;
}
}
}
その後
Singleton.Instance.MyNonstaticMethod()
あなたの例に基づいて、このコードを使用したほうがよいでしょう。
public static void example()
{
static();
}
public static void static()
{
}
ここで、非静的メンバー、つまり何らかの状態が必要な理由がある場合は、2 つのメンバーを実装できます。
public static void static(SomeState someState)
{
// Do something thread safe with someState.
}
public void nonstatic()
{
static(this.someState);
}