1. ホーム
  2. c#

[解決済み] GetType()とtypeof()はいつ、どこで使い分けるのか?重複

2023-05-20 02:19:57

質問

なぜこれが有効なのか

if (mycontrol.GetType() == typeof(TextBox))
{} 

で、これはないのですか?

Type tp = typeof(mycontrol);

しかし、これは動作します。

Type tp = mycontrol.GetType();

私自身は is 演算子を使って型チェックをしていますが typeof()GetType()

いつ、どこで GetType() または typeof() ?

どのように解決するのですか?

typeof で知られている型を得るための演算子です。 コンパイル時 (あるいは少なくとも一般的な型パラメータ)を得るための演算子です。のオペランドは typeof のオペランドは常に型名または型パラメタの名前です。 決して は、値を持つ式(例えば変数)です。を参照してください。 C#言語仕様 を参照してください。

GetType() は、個々のオブジェクトに対して呼び出されるメソッドで 実行時間 を取得するためのメソッドです。

がない限りは だけ のインスタンスのみが必要な場合は TextBox (のインスタンス(サブクラスのインスタンスではなく)が必要です。

if (myControl is TextBox)
{
    // Whatever
}

または

TextBox tb = myControl as TextBox;
if (tb != null)
{
    // Use tb
}