0

全クラス共通のメソッドを作りたい --->

RestMethods.ClearAllStaticValues(this);

そのため、ここではこれを引数として渡しています。これはクラス参照です。しかし、メソッド定義でこれをキャッチするにはどうすればよいですか。メソッド定義では、そのクラス フィールドを (リフレクションを使用して) 処理しています。現在、同じクラスでそれを行っています。以下のコード --->

var varList = this.GetType().GetFields(BindingFlags.NonPublic | BindingFlags.Static).ToList();
varList.Where(x => x.FieldType == typeof(Int32)).ToList().ForEach(x => x.SetValue(this, 0)); 

注: このように使用したくありません--->

Class A
{
     RestMethods.ClearAllStaticValues(this);
}

& メソッド定義--->

RestMethods.ClearAllStaticValues(A args);

クラス固有になるためです。

4

3 に答える 3

4

あなたはおそらく単に渡すことができますType

public static void ClearAllStaticValues(Type t)
{
    var varList = t.GetFields(BindingFlags.NonPublic | BindingFlags.Static);
    varList.Where(x => x.FieldType == typeof(Int32)).ToList().ForEach(x => x.SetValue(null, 0)); 
}

次のように呼び出します。

public class A
{
    public static void Clear()
    {
        //static member 
        RestMethods.ClearAllStaticValues(typeof(A));
    }
    public void ClearInstance()
    {
        //instance member
        RestMethods.ClearAllStaticValues(GetType());
    }
}

ここにデモがあります: http://ideone.com/oYQh5X

于 2013-05-13T05:30:19.113 に答える
0

リフレクションを使用する代わりに、インターフェースを使用します。

interface ClearValues
{
    void ClearStaticValues();
}
class AnyClass : ClearValues
{
    private static int A, B, C;
    public void ClearStaticValues()
    {
        A = 0;
        B = 0;
        C = 0;
    }
}

すべてのオブジェクトがそのインターフェイスを派生させたら、 を呼び出すことができます .ClearStaticValues()

ClearStaticValuesこれにより、クラスごとにメソッドを調整できます。

于 2013-05-13T07:02:08.187 に答える