1

私はこのクラス構造を持っています:

class A     {   }
class B:A   {   }

A x = new B();

これはランタイムタイプです:

x.GetType(); //B

コンパイル時のタイプを取得するにはどうすればよいですか?

私は試しtypeof (x)ました-しかし、引数は型でなければなりません...

私の欲望の答えは:A

編集

なぜ私はそれを求めているのですか?

intが思うに、エンジンを介して初期化されていると思いますpolymorphic

このようなもの :

object myInd = new Int32(); / /this DOES compile 

そして私は私の仮定を検証したい:

それはオブジェクトから来ていますか?

そしてそれをするために-私はその静的なタイプを知らなければなりません...

4

2 に答える 2

12

ジェネリックメソッドを作成できます。

Type StaticTypeOf<T>(T t)
{
  return typeof(T);
}

それを呼び出すには:

object i = 1;

// Writes out System.Object
Console.WriteLine(StaticTypeOf(i).ToString());

それは解決策です-解決策で解決された問題が何であるかはわかりませんが;-)

于 2012-05-27T19:04:04.793 に答える
1

他の人のコメントで述べられているように、オブジェクトの静的型は、コンパイル時にコンパイラに自分で伝えるものです。実行時にそれを見つけることにはまったく意味がありません。

object myInd = new Int32(); / /this DOES compile 

これは、「intがポリモーフィックエンジンを介して初期化される」ためではなく、C#ではすべてを型に変換できるためにコンパイルされobjectます。これは同じではありません。

値型(などInt32)からへの変換はobject、のプロセスを通じて実現されますboxing。このmsdnページですべてを読むことができます:http://msdn.microsoft.com/en-us/library/yz2be5wk.aspx

于 2012-05-27T20:21:38.577 に答える