“'”是什么意思?(TArg0, TEnum, TInt)中的扩展方法
本文关键字:TInt TEnum 方法 扩展 TArg0 是什么 意思 | 更新日期: 2023-09-27 18:19:06
我可以定义一个扩展方法来确定一个对象是否为null
public static bool IsNull(this object obj) {
if (obj == null)
return true;
else return false;
}
但是我也可以这样做:
public static bool IsNull<T>(this T obj) {
if(obj == null)
return true;
else return false;
}
两者都被应用于每个对象。这个T的目的是什么?进一步详细说明是哪种类型?如果是,为什么typeof(T)
是可能的?那么(this T obj) where T: int)
(其中)背后的原因是什么呢? (这行不通,正如@MatthewWatson所指出的)
这么多问题
T
是泛型方法的类型参数。
有关泛型的MSDN文档请参阅此处:http://msdn.microsoft.com/en-us/library/512aeb7t.aspx
与扩展方法无关;它只是做泛型。
T表示通用。这意味着类型是未知的。默认情况下,它是一个对象,就像。net中所有东西都是对象一样。但是你可以用where范式特殊化T。比如T是一次性的。那么你的函数将只适用于IDisposable类型。
T
历来表示Type
。按照惯例,它被用来定义泛型(在c++模板中)形参。在你的例子中,这是不必要的,因为。net基础结构中的任何对象都继承了基本的object
。
但是请记住c++的美好旧日,那时甚至没有引入c#。c++只有普通类型,没有公共父类型(即object
)。因此,开发人员被迫使用一些东西来告诉编译器"这里有些东西将被替换,实际上我不知道具体是什么,但稍后,在编译时就会清楚了。"请为我做这件事。
回到表示法,在MFC中使用了另一个前缀- C
,如CString
。
UPD:你的第一个例子将不工作,因为它是扩展和null
对象没有任何方法,即使你的IsNull
。
UPD1:不要读上面的UPD,蛋糕是骗人的