Подтвердить что ты не робот

В чем разница между typeof и ключевым словом?

Какая точная разница между ними?

// When calling this method with GetByType<MyClass>()

public bool GetByType<T>() {
    // this returns true:
    return typeof(T).Equals(typeof(MyClass));

    // this returns false:
    return typeof(T) is MyClass;
}
4b9b3361

Ответ 1

Вы должны использовать is AClass для экземпляров и не сравнивать типы:

var myInstance = new AClass();
var isit = myInstance is AClass; //true

is работает также с базовыми классами и интерфейсами:

MemoryStream stream = new MemoryStream();

bool isStream = stream is Stream; //true
bool isIDispo = stream is IDisposable; //true

Ответ 3

typeof(T) возвращает экземпляр Type. и Type никогда не равен AClass

var t1 = typeof(AClass)); // t1 is a "Type" object

var t2 = new AClass(); // t2 is a "AClass" object

t2 is AClass; // true
t1 is AClass; // false, because of t1 is a "Type" instance, not a "AClass" instance

Ответ 4

  • typeof (T) возвращает объект Type
  • Тип не является классом и никогда не может быть, поскольку тип не получается из класса AClass

ваше первое утверждение правильно

Ответ 5

typeof возвращает объект Type, описывающий T, который не имеет тип AClass, поэтому is возвращает false.

Ответ 6

  • сначала сравнивает два объекта Type (типы сами являются объектами в .net)
  • второй, если хорошо написано (myObj - AClass), проверьте совместимость между двумя типами. если myObj является экземпляром класса, наследующего от AClass, он вернет true.

typeof (T) - AClass возвращает false, потому что typeof (T) - Type и AClass не наследуется от Type