比較 - c# 型名 取得




C#のmyCustomer.GetType()とtypeof(Customer)の違いは何ですか? (5)

GetType()は、実行時にオブジェクト参照の実際の型を見つけるために使用されます。 これは、継承のためにオブジェクトを参照する変数の型と異なる場合があります。 typeof()は、コンパイル時に指定された正確な型の型リテラルを作成します。

私は両方のコードが私が維持しているいくつかのコードで行われて見たことがあるが、違いを知らない。 1つはありますか?

myCustomerがCustomerのインスタンスであることを追加します


typeof演算子は、型をパラメータとして取ります。 コンパイル時に解決されます。 GetTypeメソッドは、オブジェクトに対して呼び出され、実行時に解決されます。 最初のタイプは、既知のタイプを使用する必要がある場合に使用され、2つ目は、それが何であるかわからない場合にオブジェクトのタイプを取得することです。

class BaseClass
{ }

class DerivedClass : BaseClass
{ }

class FinalClass
{
    static void RevealType(BaseClass baseCla)
    {
        Console.WriteLine(typeof(BaseClass));  // compile time
        Console.WriteLine(baseCla.GetType());  // run time
    }

    static void Main(string[] str)
    {
        RevealType(new BaseClass());

        Console.ReadLine();
    }
}
// *********  By Praveen Kumar Srivastava 

はい、顧客から継承された型がある場合は違いがあります。

class VipCustomer : Customer
{
  .....
}

static void Main()
{
   Customer c = new VipCustomer();
   c.GetType(); // returns typeof(VipCustomer)
}

コンパイル時にtypeofが実行され、実行時にGetTypeが実行されます。 これは、これらの2つの方法ではまったく異なるものです。 そのため、型階層を扱うときにGetTypeを実行するだけで型の正確な型名を見つけることができます。

public Type WhoAreYou(Base base)
{
   base.GetType();
}

両方の結果は、あなたのケースではまったく同じです。 これはSystem.Typeから派生したカスタム型になります。 ここでの唯一の違いは、クラスのインスタンスから型を取得する場合、 GetTypeを使用することです。 インスタンスがなくても型名を知っていれば(実際のSystem.Typeだけを調べたり比較したりする必要がある)、 typeofを使用します。

重要な違い

編集: typeofがコンパイル時に解決されている間、 GetTypeへの呼び出しは実行時に解決されるとGetTypeう。





.net