2016-11-20 4 views
3

Итак, я нашел много ответов на вопрос, если и почему это нормально, если конструктор определен в абстрактном классе.Конструктор C# для типа параметризованного абстрактного класса

В настоящее время я пытаюсь сделать параметризованный конструктор доступен в абстрактном классе, который имеет параметр типа:

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

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

    } 
} 

Но с # просто отказывается от него и Intellisense полностью ломается. Итак, почему возможно иметь конструктор в абстрактном классе, но как только абстрактный класс получает параметр типа, все его отказывает?

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

} 

Вам не нужно указывать тип параметра в конструкторе.

Точка конструктора в абстрактном классе заключается в принуждении производных классов к вызову одного из конструкторов абстрактного класса из любого конструктора, определяемого производными классами.

Смежные вопросы