2009-08-19 6 views
0

Voici un exemple rapide de ce que je fais. Fondamentalement, j'ai plusieurs interfaces qui peuvent être implémentées par 1 classe ou par des classes séparées, donc je stocke chacun dans l'application. Ma seule question concerne les variables myInterface, yourInterface et ourInterface. Font-ils référence au même objet ou existe-t-il 3 objets différents?Implémentation de plusieurs interfaces et instances d'objets dans .Net

interface IMyInterface 
{ 
    void MyFunction(); 
} 

interface IYourInterface() 
{ 
    void YourFunction(); 
} 

interface IOurInterface() 
{ 
    void OurFunction(); 
} 

public class MainImplementation : IMyInterface, IYourInterface, IOurInterface 
{ 
    public void MyFunction() { } 
    public void YourFunction() { } 
    public void OurFunction() { } 
} 

private IMyInterface myInterface; 
private IYourInterface yourInterface; 
private IOurInterface ourInterface; 

static void Main(string[] args) 
{ 
    myInterface = new MainImplementation() as IMyInterface; 
    yourInterface = myInterface as IYourInterface; 
    ourInterface = myInterface as IOurInterface; 
} 

Bonus: Y at-il une meilleure façon de le faire?

+0

Je suis un peu confus par le titre de cette question. Qu'est-ce que ByVal ou ByRef ont à faire avec l'exemple de code fourni? Aucune des méthodes ne prend de paramètres. – JohnFx

+0

L'a corrigé. J'espère que c'est un peu mieux. C'était une longue journée :) – kevindaub

Répondre

5

Ils font tous référence au même objet. Donc, les changements à eux sous la forme de:

ourInterface.X = ... 

Sera reflété dans 'toutes les vues'.

Effectivement ce que vous faites avec votre casting (et je présume que vous vouliez dire que votre dernier est 'comme IOurInterface') donne une 'vue' différente des données. Dans ce cas, chaque interface ouvre une fonction chacun.

+0

Merci. J'avais le sentiment que c'était le cas mais j'avais juste besoin de vérification. – kevindaub

3

Ils font référence à la même instance. Il est une seule instance.

2

1 nouveau = 1 objet. Ils font tous référence à la même instance.

0

Ils font référence au même objet. Passer un objet à un autre dit juste au compilateur que lorsqu'une méthode est appelée sur cet objet, utilisez la méthode définie dans cette classe par opposition à une méthode différente.

Questions connexes