Общие методы C#.NET и наследование

Действительно ли возможно сделать следующее с дженериками в C#.NET

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

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

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

6
задан eaglestorm 20 May 2010 в 02:09
поделиться

2 ответа

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

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

public class C: A<DateTime> 
{ 
    public override DateTime MethodB(string s) 
    { 
        ...
    } 
} 
7
ответ дан 16 December 2019 в 21:35
поделиться

Нет.

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

1
ответ дан 16 December 2019 в 21:35
поделиться
Другие вопросы по тегам:

Похожие вопросы: