2016-11-20 110 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) 
{ 

} 

你並不需要指定構造函數的類型參數。

一個構造在一個抽象類的點是迫使派生類調用從任何構造抽象類構造,所述派生類定義中的一個。從構造函數聲明