2016-11-20 112 views
3

C#构造函数,因此我发现很多答案的问题,如果,为什么它是确定在一个抽象类中定义构造函数。类型参数化抽象类

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

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

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

    } 
} 

但是C#简单地拒绝它和智能完全分解。 那么,为什么有可能有一个构造函数在一个抽象类,但只要抽象类得到一个类型参数都拒绝呢?

+0

这不是特定于抽象类。使用任何通用类/结构的构造相同的语法,即不要重复在构造函数名称的通用参数的''名单。您仍然可以在泛型类型的所有部分使用'T',包括实例构造函数。 –

回答

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) 
{ 

} 

你并不需要指定构造函数的类型参数。

一个构造在一个抽象类的点是迫使派生类调用从任何构造抽象类构造,所述派生类定义中的一个。从构造函数声明