C#类型参数化抽象类的构造函数

4

我发现了很多关于在抽象类中定义构造函数是否可行以及为什么可行的答案。

我目前正在尝试在一个具有类型参数的抽象类中提供一个带参数的构造函数:

public abstract class Cell<T>
{
    int address;
    T value;

    protected Cell<T>(int address, T value)
    {

    }
}

但是C#会直接拒绝它,而且Intellisense也会完全崩溃。 那么为什么在抽象类中可以有构造函数,但一旦抽象类获得了类型参数,所有的东西都会被拒绝呢?


这不仅适用于抽象类。对于任何通用类/结构的构造函数使用相同的语法,即不要在构造函数名称中重复<T>泛型参数列表。您仍然可以在通用类型的所有部分中使用T,包括实例构造函数。 - Jeppe Stig Nielsen
2个回答

4

将构造函数声明中的<T>删除,然后一切都可以正常工作。例如,以下代码可以编译通过:

public abstract class Cell<T>
{
    int address;
    T value;

    protected Cell(int address, T value)
    {

    }
}

public class CellInt : Cell<int>
{
    public CellInt(int address, int value): base(address, value) { }
}

2
你的构造函数应该长成这个样子:
protected Cell(int address, T value)
{

}

在构造函数中,您无需指定类型参数。

抽象类中构造函数的目的是强制派生类从任何定义的构造函数中调用抽象类的构造函数。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接