interface comme type de retour
interface Peut être un type de retour d'une fonction. Si oui, alors quel est l'avantage. par exemple, le code suivant est-il correct là où le tableau d'interface est retourné.
public interface Interface
{
int Type { get; }
string Name { get; }
}
public override Interface[] ShowValue(int a)
{
.
.
}
4 réponses
Oui, vous pouvez retourner une interface.
disons classes A
et B
chaque interface implémentée Ic
:
public interface Ic
{
int Type { get; }
string Name { get; }
}
public class A : Ic
{
.
.
.
}
public class B : Ic
.
.
.
}
public Ic func(bool flag)
{
if (flag)
return new A();
return new B();
}
Dans cet exemple,func
est comme la méthode d'usine - il peut retourner des objets différents!
Oui interface
est une valeur de retour très valide. Rappelez - vous, vous ne retournez pas la définition de l'interface, mais plutôt un exemple de cette interface.
L'avantage est très clair, considérons le code suivant:
public interface ICar
{
string Make { get; }
}
public class Malibu : ICar
{
public string Make { get { return "Chevrolet"; } }
}
public class Mustang : ICar
{
public string Make { get { return "Ford"; } }
}
vous pouvez maintenant retourner un certain nombre de différents ICar
les instances qui ont leurs propres valeurs.
mais, la raison principale de l'utilisation des interfaces est qu'elles peuvent être partagées parmi assemblées dans un contrat de sorte que lorsque vous passez à quelqu'un ICar
, ils ne savent rien à ce sujet, mais ils savent qu'il y a un Make
. En outre, ils ne peuvent rien exécuter contre elle sauf l'interface publique. Donc, si Mustang
avait public
membre Model
ils ne pouvaient pas obtenir que si elle était dans l'interface.
Oui, il peut.
L'avantage est que vous pouvez résumé le retour (et d'entrée).
public interface IFruit{ }
public class Apple: IFruit{}
public class Pear: IFruit{}
...
public function IFruit SelectRandomFromBasket(Basket<IFruit> basket){
// this function can return Apple, Pear
}
Oui c'est possible, et c'est une bonne chose pour les fonctions publiques.
pour le pourquoi une partie de votre question, Je ne vais pas copier coller les réponses d'autres personnes, alors s'il vous plaît se référer aux réponses existantes, par exemple: