class A;
class B:A;
class Fork<T> where T: A;
class Equip: Fork<B>;
public Fork<A> GetElement()
{
return new Equip(B_Obj);
}
Ругается в GetElement() мол не может привести типы, возможно ли осуществить такое наследование?
Нельзя. Ковариантность/контрвариатнность для классов не поддерживается.
Можно ввести интерфейсы, если это не противоречит задаче.
Одиночное наследование — это всего лишь частный случай множественного наследования.
Здравствуйте, ZagSer168, Вы писали:
ZS>Нельзя. Ковариантность/контрвариатнность для классов не поддерживается.
ZS>Можно ввести интерфейсы, если это не противоречит задаче.
interface IFork{}
class A { }
class B : A { }
class Fork<T> : IFork where T : A { }
class Equip : Fork<B> { }
public IFork GetElement()
{
return new Equip();
}
Сейчас оно как раз так и реализовано, просто думал, что возможно, я что то упускаю, и можно обойтись без интерфейса. Спасибо.
Здравствуйте, v_0ver, Вы писали:
_>Здравствуйте, ZagSer168, Вы писали:
ZS>>Нельзя. Ковариантность/контрвариатнность для классов не поддерживается.
ZS>>Можно ввести интерфейсы, если это не противоречит задаче.
_>_>interface IFork{}
_>class A { }
_>class B : A { }
_>class Fork<T> : IFork where T : A { }
_>class Equip : Fork<B> { }
_>public IFork GetElement()
_>{
_> return new Equip();
_>}
_>
_>Сейчас оно как раз так и реализовано, просто думал, что возможно, я что то упускаю, и можно обойтись без интерфейса. Спасибо.
что то твой код не эквивалентен исходному, который в первом посте был. Тут у тя нет ковариантности.
Под вводом интерфейса имеется в виду что то типа такого:
class A;
class B:A;
interface IFork<T> where T: A;
class Fork<T>: IFork<T>;
class Equip: Fork<B>;
public IFork<A> GetElement()
{
return new Equip(B_Obj);
}
Здравствуйте, Jack128, Вы писали:
J>...
J>interface IFork<T> where T: A;
...
J>
interface IFork<out T> where T: A;
Спасибо, я кажется разобрался в теме.