2009-08-19 53 views
0

以下は、私が行っていることの簡単な例です。基本的には、1つのクラスまたは別々のクラスで実装できる複数のインターフェイスがあるので、それぞれをアプリケーションに格納します。私の唯一の質問は、変数myInterface、yourInterface、およびourInterfaceです。 同じオブジェクトを参照しているか、3つの異なるオブジェクトがありますか?複数のインターフェイスとオブジェクトインスタンスの実装.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; 
} 

ボーナス:これを行うより良い方法はありますか?

+0

私はこの質問のタイトルによって少し混乱しています。 ByValやByRefは、提供されたコードサンプルと何が関係していますか?どのメソッドもパラメータを取ることはありません。 – JohnFx

+0

修正済みです。うまくいけば、それは少し良いです。長い一日でした:) – kevindaub

答えて

5

これらはすべて同じオブジェクトを参照します。したがって、次の形式の変更:

ourInterface.X = ... 

「すべてのビュー」に反映されます。

実際にあなたのキャスティングで何をしているのですか(そして最後のものを 'IOurInterface'として指定したと仮定します)が、データの異なるビューを提供しています。この場合、各インタフェースはそれぞれ1つの関数を開きます。

+0

ありがとうございました。私はそのような気分だったが、ただ検証が必要だった。 – kevindaub

3

これらは同じインスタンスを参照します。 です。

2

1新規= 1オブジェクト。それらはすべて同じインスタンスを参照します。

0

これらは同じオブジェクトを参照します。オブジェクトを別のものにキャストすると、このオブジェクトに対してメソッドが呼び出されたときに、このクラスで定義されたメソッドを別のメソッドとして使用することがコンパイラに伝えられます。

関連する問題