Я хотел бы переопределить общий метод в производном классе. Загвоздка в том, что я хотел бы иметь конкретную реализацию типа параметра, как так:Переопределить общий метод с конкретным типом (параметр типа * скрывает класс *)
namespace Stumped
{
public class Generic<T> where T : new()
{
public virtual T Foo()
{
return new T();
}
public virtual TAnother GenericMethod<TAnother>() where TAnother : new()
{
return new TAnother();
}
}
public class Concrete : Generic<Inner1>
{
// Concrete return type. Works as expected.
public override Inner1 Foo()
{
return base.Foo();
}
// Why doesn't this make sense? Shows 'Type parameter "Inner2" hides class "Inner2"'.
public override Inner2 GenericMethod<Inner2>()
{
return base.GenericMethod<Inner2>();
}
}
public class Inner1 { }
public class Inner2 { }
}
Как уже упоминалось, компилятор говорит мне:
Тип параметра «Внутренний» скрывающую класса «внутренний»
Я бы ожидал, что моя реализация будет работать, вместо того, чтобы использовать другой общий параметр в этом производном классе.
Почему это не имеет смысла?
Мой компилятор ничего не отображает. – Valentin
Может быть, переделанная вещь. Тем не менее сообщение действительно. Если бы я попытался получить доступ к свойству Inner2 внутри переопределенного GenericMethod, он говорит мне, что для этого свойства нет определения (потому что, по-видимому, я скрываю класс). – bitbyte