Si potrebbe semplicemente restituire un oggetto poiché tutti i tipi discendono da Object.
public Object GetAnything()
{
Hello hello = new Hello();
Computer computer = new Computer();
Radio radio = new Radio();
return radio; or return computer; or return hello //should be possible?!
}
Si potrebbe quindi lanciare al suo tipo rilevanti:
Hello hello = (Hello)GetAnything();
Se non sapevano cosa del tipo sarebbe stata allora si potrebbe utilizzare la parola chiave is
.
Object obj = GetAnything();
if (obj is Hello) {
// Do something
}
Detto questo, sarei riluttante a scrivere un codice del genere. Sarebbe molto meglio avere un'interfaccia che è implementata da ciascuna delle tue classi.
public ISpeak GetAnything()
{
Hello hello = new Hello();
Computer computer = new Computer();
Radio radio = new Radio();
return radio; or return computer; or return hello //should be possible?!
}
interface ISpeak
{
void Speak();
}
e hanno ciascuna delle classi implementare l'interfaccia:
public class Hello : ISpeak
{
void Speak() {
Console.WriteLine("Hello");
}
}
È quindi possibile fare qualcosa di simile:
GetAnything().Speak();
fonte
2012-01-24 12:55:31
Vedi http://stackoverflow.com/questions/1048884/c-overriding-return-types per un problema simile e una soluzione. Devo essere onesto, però, in quanto penso che tu abbia un problema di progettazione se lo stai facendo; se hai dei tipi definiti allora dovrebbe essere possibile strutturare il tuo codice senza questo. – dash
è possibile restituire 'object' e quindi trasmettere il risultato oppure utilizzare un metodo generico – balexandre
Qual è il problema effettivo che si sta tentando di risolvere? Il tipo di ritorno – RQDQ