是否可以使用扩展方法扩展泛型类?

时间:2015-08-03 10:01:14

标签: c# generics extension-methods

我想构建一个可以应用于任何类的通用扩展方法,但我不知道该怎么做。

到目前为止,我有:

public static class ClassExtensionMethods
{
    public static string GetName(this class tempClass)
    {
        return typeof(tempClass).Name;
    }
}

所以我可以用它作为:

var NameOfClass1 = MyClass.GetName();
var NameOfClass2 = DiffClass.GetName();

但目前这还没有编译。

是否可以执行此操作或我是否必须在Type上执行扩展方法?

2 个答案:

答案 0 :(得分:4)

您无法使用静态扩展方法,我看不到任何解决方法来实现您想要的功能。

这有什么问题?

var nameOfClass1 = typeof(MyClass).Name;

那还是太久了吗?没办法缩短它。

好的,将扩展程序放在Type上,因为您无法扩展class。您只能扩展值,而不是类型。

因此,您的Type扩展程序将为:

public static string GetName(this Type type) 
{ 
   return type.Name;
}

你会像以下一样使用它:

typeof(MyClass).GetName();

答案 1 :(得分:1)

只需将方法设为通用:

public static class ClassExtensionMethods
{
    public static string GetName<T>(this T tempClass)
    {
        return typeof(T).Name;
    }
}

这要求您在T的实例上调用该方法 但是你的情况并不是一个很好的例子,因为你可以直接在Type上调用.Name;不需要扩展方法。
如果您只想将T约束到类,可以添加where T : class

public static string GetName<T>(this T tempClass) where T : class
{
    return typeof(T).Name;
}