OK, że tytuł jest trochę niejasne, ale nie mogę wymyślić lepszego sposobu oddania go, inne niż wyjaśniając ...Czy można wykryć kontekst klasy w odziedziczonej metodzie statycznej?
Say mam klasy Animal
, ze statycznym, metody rodzajowe:
public static T Create<T>() where T : Animal {
// stuff to create, initialize and return an animal of type T
}
I mam podklasy Dog
, Cat
, Hamster
itd. W celu uzyskania Dog
, mogę napisać:
Dog d = Animal.Create<Dog>();
o r
Dog d = Dog.Create<Dog>();
co jest naprawdę tym samym. Ale wydaje mi się dość głupio pisać tyle razy, aby napisać Dog
, ponieważ już inwokuję statyczną metodę poprzez podklasę Dog
.
można myśleć o jakiejkolwiek sprytny sposób pisania metodę Create()
w klasie bazowej, abym mógł powołać
Dog d = Dog.Create();
Cat c = Cat.Create();
Hamster h = Hamster.Create();
bez pisania metodę Create()
w każdym z podklasy?
Prawdopodobnie będziesz chciał ograniczyć 'T' do zwierząt:' klasa Animal gdzie T: Animal ' –
dtb
@dtb: Pewnie! Odpowiedź zaktualizowana, dziękuję. –
Kod wewnątrz funkcji Create() wywoła metody wirtualne/abstrakcyjne, dzięki czemu utworzy instancje typów pochodnych. –