从泛型参数扩展
本文关键字:扩展 参数 泛型 | 更新日期: 2023-09-27 18:15:14
假设我写这样一个类:
public A<T> : T
{
}
基本上,我想要A
从(继承)任何T
是。
例如,如果我这样写:
public class B
{
public string Name { get { return "B"; } }
}
我应该能够完成这样的事情:
B instance = new A<B>();
Console.WriteLine(instance.Name);
不能编译。
如何从泛型参数扩展?
如果做不到,为什么不可能呢?
你不能这样做,因为即使你可以写一个约束说"它必须是一个类"…
// NOT WORKING CODE...
public class B<T> : T where T : class
…不能保证类不是密封的。
这就是为什么编译器说你不能这样做。
你能做的是创建一个真正的基类,并将T约束为该基类,并从基类继承…
public class B<T> : BaseType where T : BaseType
的例子:
public class BaseClass
{
}
public class A : BaseClass
{
}
public class B<T> : BaseClass where T : class
{
}
用法:
var x = new B<A>();
你可以让它工作:
class Program
{
public static void Main()
{
B instance = new A<B>();
Console.WriteLine(instance.Name);
Console.Read();
}
}
public class A<T> : B where T : B { }
public class B
{
public string Name { get { return "B"; } }
}
虽然这里A
应该直接继承B
。不确定你的最终目标是什么
也许您可以创建一个扩展方法来执行您正在寻找的任务,而不是尝试创建继承泛型的类。
public static void ExtensionTest<T>(this T test)
{
Console.WriteLine("ExtensionTest");
}
在使用:var b = new B();
b.ExtensionTest();