typeof和is关键字有什么区别?
这两者之间的确切区别是什么?
// 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; }
你应该使用实例is AClass
,而不是比较types:
var myInstance = new AClass(); var isit = myInstance is AClass; //true
与基类和接口一起工作:
MemoryStream stream = new MemoryStream(); bool isStream = stream is Stream; //true bool isIDispo = stream is IDisposable; //true
is
关键字检查对象是否属于某种types。 typeof(T)
是Type
,而不是Type
types的。
请检查MSDN中的is关键字和typeof关键字
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
- typeof(T)返回一个Type对象
- Type不是AClass,因为Type不是从AClass派生的
你的第一个说法是对的
typeof
返回一个描述T
的Type
对象,它不是AClass
types的,因此返回false。
- 首先比较两个Type对象(types本身是.net中的对象)
- 其次,如果写得好(myObj是AClass),检查两种types之间的兼容性。 如果myObj是一个从AClassinheritance的类的实例,它将返回true。
typeof(T)是AClass返回false,因为typeof(T)是Type,而AClass不是从Typeinheritance的