我想构建一个可以应用于任何类的通用扩展方法,但我不知道该怎么做。
到目前为止,我有:
public static class ClassExtensionMethods
{
public static string GetName(this class tempClass)
{
return typeof(tempClass).Name;
}
}
所以我可以用它作为:
var NameOfClass1 = MyClass.GetName();
var NameOfClass2 = DiffClass.GetName();
但目前这还没有编译。
是否可以执行此操作或我是否必须在Type
上执行扩展方法?
答案 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;
}