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)
{
.
.

}
19
demandé sur John Saunders 2013-03-13 21:23:18

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!

16
répondu One Man Crew 2014-09-11 17:46:13

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.

17
répondu Mike Perrenoud 2018-09-06 07:44:19

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
}
8
répondu Sten Petrov 2013-03-13 17:27:18

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:

5
répondu ken2k 2017-05-23 10:30:45