Общие методы и наследование C # .NET - PullRequest
6 голосов
/ 20 мая 2010

Можно ли сделать следующее с обобщениями в C # .NET

public abstract class A
{
    public abstract T MethodB<T>(string s);
}

public class C: A
{
    public override DateTime MethodB(string s)
    {
    }
}

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

Ответы [ 2 ]

7 голосов
/ 20 мая 2010

Параметр типа должен быть объявлен с типом, а подкласс объявит конкретный тип в своем объявлении наследования:

public abstract class A<T>
{ 
    public abstract T MethodB(string s); 
} 

public class C: A<DateTime> 
{ 
    public override DateTime MethodB(string s) 
    { 
        ...
    } 
} 
1 голос
/ 20 мая 2010

Нет.

Причина в том, что вы предоставляете реализацию только для одного особого случая. Базовый класс требует от вас реализации MethodB, которая может работать для любого типа T. Если вы реализуете его только для DateTime и если кто-то звонит, например, ((A)obj).MethodB<int>, то у вас нет реализации, которая могла бы быть использована!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...