2010-10-02 4 views
2

Je cherche une explication très simple des interfaces en C#. J'ai demandé à google mais les réponses que je reçois sont très techniques et formulées d'une manière qu'un programmeur peut comprendre. Cela ressemble presque à une méthode qui peut être appelée pour exécuter une fonction. Elle permet au programmeur d'utiliser moins de touches. D'après ce que je lis ci-dessous, les interfaces sont un moyen de créer un conteneur de méthode qui fait la même chose mais avec des technologies différentes.Interfaces en C#

Je voudrais savoir ce que c'est? Ce qu'ils font? Qu'est-ce que je pourrais les utiliser pour?

+4

"Formulé d'une manière qu'un programmeur pourrait comprendre ..." Que demander de plus? –

+0

Je suis très novice en programmation. Je cherche un moyen de comprendre cela. – user770022

Répondre

7

Imaginez que vous avez un magasin de pizza (je vole cet exemple d'un célèbre Patterns design hUEZ k). Vous savez que toutes les pizzas doivent être commandées, préparées, cuites et emballées. Eh bien, vous pouvez définir ce comportement commun dans une interface:

public interface IPizza 
{ 
    void Order(); 
    void Prepare(); 
    void Bake(); 
    void Box(); 
} 

Et que vos différents types de pizzas implémentent cette interface. Lorsque vous implémentez une interface, vous forçant cette classe d'avoir les mêmes méthodes et paramètres que l'interface, par exemple:

public class PepperoniPizza : IPizza 
{ 
    public void Order() 
    { 
     //Order Pepperoni pizza 
    } 

    public void Prepare() 
    { 
     //Prepare Pepperoni pizza 
    } 

    public void Bake() 
    { 
     //Bake Pepperoni pizza 
    } 

    public void Box() 
    { 
     //Box Pepperoni pizza 
    } 
} 

Vous avez à peu près la même chose avec hawaïenne, fromage ou tout autre Pizza.

Dans la réalité, il existe plusieurs utilisations pour les interfaces. Vous pouvez créer des contrats pour étendre une application ou vous assurer qu'elle fonctionne dans différentes situations.

Hope this helps

+0

a aidé beaucoup merci – user770022

+1

Je veux juste ajouter, puisque l'OP a mentionné que les fonctions seraient "appelées dans l'ordre", que tandis que cet exemple particulier implique un ordre, les fonctions peuvent être appelées dans n'importe quel ordre et autant de fois. – siride

+0

Merci beaucoup pour ça ^^. Diriez-vous que les interfaces sont des modèles qui définissent ce qui DOIT être implémenté? – Marko

9

est conçu de la manière d'un programmeur.

Si vous n'êtes pas un programmeur, vous allez avoir un peu de mal à comprendre les interfaces. Sans une assez bonne compréhension des principes fondamentaux orientés objet, cela peut sembler un peu confus. Mais partir:

Les interfaces sont similaires à des classes, mais au lieu de vous dire ce qu'un objet est il vous dit ce qu'il fait . Par exemple, une interface très commune est IEnumerable. Lorsqu'une classe implémente cette interface, cela signifie que l'objet peut créer et renvoyer un Enumerator, qui peut être utilisé par une autre partie du code (généralement une boucle foreach ou une requête LINQ). Un autre que vous pourriez voir beaucoup est IDisposable. Cela signifie que vous appelez appel .Dispose() sur l'objet et il va nettoyer les ressources. Il ne dit rien sur les ressources qu'il va nettoyer ou ce que l'objet est - il pourrait être un StreamReader ou un SqlConnection ou quelque chose. Tout ce qu'il dit est qu'il a une méthode appelée Dispose.

Les interfaces sont des concepts très utiles. Si vous avez beaucoup de classes qui sont très différentes mais partagent un certain comportement commun, vous pouvez les faire toutes implémenter une seule interface et ensuite les utiliser comme une seule. Par exemple, si vous aviez une interface:

interface ICanPrintMyContents 
{ 
    void PrintContents(); 
} 

Puis un tas de classes qui les mettent en œuvre:

class ParkingGarage : ICanPrintMyContents { ... } 
class UnimpressivePolitician : ICanPrintMyContents { ... } 
class BankingSimulation : ICanPrintMyContents { ... } 

Vous pouvez les mettre tous dans une liste ensemble, même si il n'y a pas de relation réelle entre leur Des classes.

List<ICanPrintMyContents> list = { theGarage, insertNameHere, sim1, anotherGarage }; 
foreach(ICanPrintMyContents item in list) 
    list.PrintContents(); 

(Note: que ICan... convention de nommage est pas largement utilisé, et je ne le conseille pas Beaucoup de gens ne l'aiment pas, mais je l'utilise ici parce qu'il transmet le sens de l'interface. plus commun serait IPrintableContents ou quelque chose)

1

C'est simplement un contrat; en ce sens, la classe particulière qui "implémente" une interface devrait avoir toutes ces propriétés et méthodes que l'interface définit. Et dans ces propriétés/méthodes, vous pouvez écrire n'importe quel code, mais les gens écrivent normalement du code qui fait des choses spécifiques.

Comme par ex.Prenons le concept de garbage collection: si vous avez besoin de contrôler la façon dont la mémoire est libérée par votre objet, vous devez implémenter l'interface IDisposable. Cette interface expose une méthode Dispose(). Bien que les programmeurs écrivent le code pour Dispose(), ils ne l'appellent jamais en code. Le cadre le fait pour vous.

Vous devez le regarder sous cet angle. Le framework n'a pas besoin de connaître les détails de votre objet de classe personnalisé. Mais tant qu'il est capable de comprendre que cet objet de classe implémente cette interface, il peut appeler la méthode Dispose() et y exécuter n'importe quel code; dans ce cas, le code de collecte des ordures.

La collecte des ordures est un sujet très dense. Mais ce que j'ai expliqué vient de gratter la surface. Maintenant, si vous voulez vraiment voir les interfaces en action, vous devriez essayer de rechercher sur .net remoting. C'est un autre sujet dense, mais cela vous aidera à comprendre.

1

Les interfaces sont des contrats. Déclarations sans implémentations. Ils sont utilisés pour le couplage lâche, la testabilité et DI.

Voici un exemple simple réel (pas les chats et les chiens) Dites que vous voulez tirer des données pour votre application. Vous créez IRepository Interface comme celui-ci

public Interface IProductRepository 
{ 
    public IList<Product> GetAllProducts() 
} 

Que dans vous implémentez avec une certaine classe qui renvoie des données faux Codés en dur (pour les tests)

public class FakeProductRepository : IProductRepository 
{ 
    public IList<Product> GetAllProducts() 
    { 
    // create some fake product list and return it 
    } 
} 

Disons que vous créez une application console. Dans votre fonction principale, vous pouvez le faire

IProductRepository repository = new FakeProductRepository() 

et tester votre logique

une fois que vous êtes à l'aise, vous pouvez avoir une classe de ProductRepository « Real » qui implémente cette interface et extrait les données sur une base de données « live »

0

Avec la mise à jour Arturo Molina est ici les membres de l'interface mise à jour

public interface IPizza 
    { 
     void Order(); 
     void Prepare(); 
     void Bake(); 
     void Box(); 
    } 

REMARQUE: Puisque les membres d'interface sont par le public par défaut et nul besoin de mentionner les modificateurs d'accès explicitement aussi n'acceptera même pas.