“'”是什么意思?(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所指出的)

这么多问题

“'”是什么意思?(TArg0, TEnum, TInt)中的扩展方法

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,蛋糕是骗人的