2011-10-20 7 views
31

可能性の重複:私はstatic方法からGetType()にアクセスできるようにするにはどうすればよい
.NET: Determine the type of “this” class in its static methodメソッドGetType

私はこの抽象基底クラス

abstract class MyBase 
{ 
    public static void MyMethod() 
    { 
     var myActualType = GetType(); // this is an instance method 
     doSomethingWith(myActualType); 
    } 
} 

と、そのクラスの実装を持っています。 (私は多くの実装を持つことができます。)

class MyImplementation : MyBase 
{ 
    // stuff 
} 

にはどうすればtypeof(MyImplementation)をするmyActualTypeを得ることができますか?

+3

私はあなたが簡単なことでこれを行うことはできないと思います。しかし、なぜあなたはこれを望んでいますか?静的メソッドのポイントは、インスタンスを実行する必要はありません。ではなぜそれは型の問題でしょうか?たぶんあなたの問題は、全く別の方法で解決することができます。 – Alxandr

+1

私はmvcアプリケーションのルートを登録するための便利なメソッドを書こうとしています - 私は名前空間でそれらを制限しようとしています。私はあなたのアプリケーションが具体的な実装を所有したいので、その抽象的な。 –

+0

次に静的なものとして書くのではなく、代わりにメソッドとして書きます。次に、 'GetType()'を使って簡単に型を取得できます。 – Alxandr

答えて

2

これは私が使用したパターンです。

abstract class MyBase 
{ 
    public static void MyMethod(Type type) 
    { 
     doSomethingWith(type); 
    } 
} 
35

静的メソッド内の「型」は、仮想静的メソッドなどは存在しないため、常に特定の型です。あなたのケースでは

が、これはあなただけ書くことができます意味:

var myActualType = typeof(MyBase); 

MyMethodの「タイプ」以来、静的であること、MyBase常に静的メソッドです。

+1

こんにちはリード - 私は上記のソリューションで問題が 'myActualType'にかかわらず、サブクラスタイプの、' MyBase'タイプに設定されるだろうということだと思います。元の質問を正しく理解すれば、ポスターは現在のクラスの型を使用するための 'MyMethod'メソッドを取得しようとしていると思います。 – matt

+2

@ mjd79:はい - でも、それは私の主張です。静的メソッドは、メソッドを使用するクラスではなく、型の一部であるため、常に基本型で型定義されます... –

+0

私のような人のためにJavaの「MyType.class」に相当するものが必要です。これがあなたの答えです。 –

19

この点についてはどうですか?

abstract class MyBase<T> 
{ 
    public static void MyMethod() 
    { 
     var myActualType = typeof(T); 
     doSomethingWith(myActualType); 
    } 
} 


class MyImplementation : MyBase<MyImplementation> 
{ 
    // stuff 
} 
+4

'Class Bar:MyBase 'をやめることから何が止まるのですか? –

+0

ああ、それは素晴らしい点です!私はコンベンションがこの仕事をする唯一のものだと思いますが、誰かがクラスをそのように宣言すれば 'MyMethod'メソッドは期待どおりに動作しません。 – matt

+3

https://msdn.microsoft.com/en-us/library/d5x73970.aspxに従って、 'T:'を実行できます – John

関連する問題