OK, quel titolo è un po 'poco chiaro, ma non riesco a pensare ad un modo migliore per dirlo, diverso da quello spiegarlo ...È possibile rilevare il contesto di classe in un metodo statico ereditato?
Dire Ho una classe Animal
, con un metodo generico static:
public static T Create<T>() where T : Animal {
// stuff to create, initialize and return an animal of type T
}
E ho sottoclassi Dog
, Cat
, Hamster
ecc al fine di ottenere un Dog
, posso scrivere:
Dog d = Animal.Create<Dog>();
o r
Dog d = Dog.Create<Dog>();
che è davvero la stessa cosa. Ma sembra un po 'sciocco dover scrivere Dog
così tante volte, dal momento che sto già invocando il metodo statico attraverso la sottoclasse Dog
.
Riuscite a pensare a un modo intelligente di scrivere un metodo Create()
nella classe base in modo che potessi richiamare
Dog d = Dog.Create();
Cat c = Cat.Create();
Hamster h = Hamster.Create();
senza scrivere un metodo Create()
in ciascuna delle sottoclassi?
Probabilmente vorrete limitare 'T' a Animali:' classe Animal dove T: Animal ' –
dtb
@dtb: Certo! Risposta aggiornata, grazie. –
Il codice all'interno di Create() chiamerà metodi virtuali/astratti, è così che creerà istanze di tipi derivati. –