Переопределение абстрактного метода с унаследованным классом в качестве типа параметра - PullRequest
0 голосов
/ 16 мая 2018

У меня есть абстрактный класс, подобный этому:

public abstract class BaseClass
{
    ...

    public abstract void MyMethod<T>(T value);
}

В унаследованных классах я хочу передать тип самого класса в качестве параметра T, поэтому я попытался сделать это:

public class InheritedClass: BaseClass
{
    ...

    public override void MyMethod<InheritedClass>(InheritedClass value)
    {
        ...
    }
}

Но intellisense предупреждает меня, что «Параметр типа InheritedClass скрывает класс Inherited class»

Что именно означает это сообщение?Есть ли другой способ добиться этого?

1 Ответ

0 голосов
/ 16 мая 2018

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

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

public abstract class BaseClass<T>
{
    public abstract void MyMethod(T value);
}

public class InheritedClass: BaseClass<InheritedClass>
{
    public override void MyMethod(InheritedClass value)
    {
    }
}
...