Mam sytuacji gdzie mam klasyInterfejs do metody, która zwraca jego własny rodzaj
class Foo
{
Foo Bar()
{
return new Foo();
}
}
Teraz I wan tot utworzyć interfejs bo
class IFoo
{
??? Bar();
}
Co powinno być w miejscu znaki zapytania? Każda klasa powinna zwracać swój własny typ, a nie Foo.
Poniższe rozwiązania działają, ale nie wyglądają na czyste. Nie rozumiem, dlaczego muszę podać tę samą klasę dwa razy, i nie ma to jak „to” dla bieżącego typu
ten sposób używam go później
class GenericClass<T> where T : IFoo
{
T foo = new T();
T item = foo.Bar();
}
Problem z interfejsem generycznym polega na tym, że musisz teraz określić T wszędzie, gdzie używasz tego interfejsu w kodzie - więc połączyłeś interfejs z typem bazowym. Interfejsy zwykle próbują robić coś przeciwnego? –
@Andrey - Tak jak powiedział Adam, jest to poważny zapach kodu. Moja odpowiedź zrobi to, o co prosisz, ale to nie jest dobra praktyka. – GenericTypeTea
@GenericTypeTea, przepraszam, że powinienem był wyjaśnić, że to zadziała :) –