从泛型参数扩展

本文关键字:扩展 参数 泛型 | 更新日期: 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();