Интерфейс C # / абстрактный класс с динамическим типом - PullRequest
4 голосов
/ 24 декабря 2010

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

public abstract dynamic Parameters {get; set;}

Затем в каждом отдельном математическом классе я хочу реализовать параметры определенного типа:

Если классу требуется период, я бы сделал это так:

public override IPeriod Parameters {get; set;}

Это не компилируется. Очевидно, я мог бы изменить тип возвращаемого значения на dynamic, и это сработало бы, но тогда я потерял intellisense Есть ли стандартный способ сделать это без потери intellisense?

Каждый из классов будет иметь параметры {get; set;} но они будут другого типа. Лучше просто исключить параметры из абстрактного класса?

Ответы [ 2 ]

11 голосов
/ 24 декабря 2010

Да, используйте дженерики ..

public MyAbstractBaseClass<T>
{
    public abstract T Parameters {get; set;}
}

тогда вы можете наследовать, указав тип, который будет использоваться для параметра как ..

public PeriodClass : MyAbstractBaseClass<IPeriod>
{
    public override IPeriod Parameters {get; set;}
}
2 голосов
/ 24 декабря 2010

Если вы сделаете параметры универсальными, вы можете вернуть любой тип, который вам нужен:

public abstract T Parameters<T> {get; set;}
...