-3

私はC#からこれを行うことができます:

public static void example()
{
    nonstatic();
}

public void nonstatic()
{ }

この問題の回避策がある場合は、自由に提供してください。ありがとうございます

4

5 に答える 5

4

staticクラスのメンバーは、そのクラスのインスタンスが存在する前に呼び出すことができます。クラスのインスタンス メンバーは、そのクラスのインスタンスが存在した後にのみ呼び出すことができ、インスタンス自体からのみ呼び出すことができます。

簡単な回避策は、呼び出そうとしているタイプの新しいオブジェクトを作成することです。

new SomeClass().nonstatic();

しかし、なぜあなたはそれをしているのですか?走らせるためですか?それでは、良いコードを書いていません。あなたはただ屈服しています。より洗練された解決策を求めてみてください..または:

または、メソッドが静的である理由を自問することもできます。そうする必要がありますか?非静的にするか、他の方法にするのは害がありstaticますか? これらの状況は、慎重にクラスを設計することで回避できます。

完全を期すために編集する

static静的メソッドから直接ではなく、そのオブジェクトのインスタンスを介してこのメ​​ソッドを呼び出す価値があるかもしれません。そうすれば、無意味に新しいオブジェクトを作成する必要がなくなります。これは、クラスのインスタンスがすべてのインスタンス メソッドとすべての静的メソッドにアクセスできるためです。

于 2013-09-03T10:44:56.503 に答える
1

クラスのインスタンスを作成し、その上でメソッドを呼び出すだけです。

public class Someclass
{

public void Data1()
{
}

public static void Data2()
{
     Someclass foo = new Someclass();
     Someclass.Data1();
}

}
于 2013-09-03T10:46:14.720 に答える
1

シングルトン パターンを使用してみてから、オブジェクトのインスタンスでメソッドを呼び出します

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()
于 2013-09-03T10:46:16.223 に答える
0

あなたの例に基づいて、このコードを使用したほうがよいでしょう。

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);
}
于 2013-09-03T11:02:34.450 に答える