Ok, ho un numero di classi diverse derivate da una classe base. Questa classe base è un abstract contenente i metodi del comando.Usa il tipo derivato nella classe astratta base
Uno dei metodi è un metodo Copy
, che dovrebbe essere presente in tutte le classi derivate, quindi l'ho inserito nella classe base. MA, voglio che restituisca il derived type
non la base né l'oggetto.
La soluzione che ho avuto per questo, sta utilizzando un tipo paramter:
abstract class CopyableClass<T>
{
public abstract T Copy();
}
class DerivedClass : CopyableClass<DerivedClass>
{
public override DerivedClass Copy()
{
//do what is needed for copy and return a new DerivedClass
}
}
Quindi, lo scopo principale è quello di
Rimuovere il parametro di tipo nella classe di base e ancora fare il metodo restituisce il tipo derivato corrispondente.
Una soluzione.
La cosa migliore che potessi fare finora è uno dei commenti qui sotto, ma utilizza ancora un parametro generico
abstract class BaseClass
{
//base methods not related to deriving type
}
interface ICopyable<T>
{
T Copy();
}
class DerivedClass : BaseClass, ICopyable<DerivedClass>
{
public DerivedClass Copy()
{
//do what is needed for copy and return a new DerivedClass
}
}
Allora, qual è la tua domanda? – evanmcdonnal
potrebbe essere meglio implementarlo come interfaccia generica? –
come rimuovere il parametro type nella classe base e continuare a restituire il metodo derivato corrispondente. –