2011-01-20 6 views
3

私はC#の初心者です。メソッドにパラメータとしてインターフェイスを渡す方法を教えてください。
つまり、インターフェースメンバー(プロパティ)にアクセスして値を割り当て、そのインターフェースを別のメソッドのパラメーターとして送信したいと考えています。例えばメソッドにパラメータとしてインターフェイスを渡すにはどうすればよいですか?

言って、私は私がIJに値を割り当てるとして全体のインターフェースを送りたい プロパティint型Iのint jとメンバーがIAppleなどのインタフェースを持っている場合パラメータは次のようになります。

メソッド(IApple var);

可能ですか?申し訳ありませんが基本的に貧しい人は私を助けてください。事前のおかげで

+2

それはあまりにも些細です。ただ検索してみてください。 http://www.java2s.com/Tutorial/CSharp/0140__Class/Useinterfaceasaparameter.htm –

+1

あなたはそれをやろうとしましたか? –

答えて

27

確かにこれは

public interface IApple 
{ 
    int I {get;set;} 
    int J {get;set;} 
} 

public class GrannySmith :IApple 
{ 
    public int I {get;set;} 
    public int J {get;set;} 

} 

//then a method 

public void DoSomething(IApple apple) 
{ 
    int i = apple.I; 
    //etc... 
} 

//and an example usage 
IApple apple = new GrannySmith(); 
DoSomething(apple); 
+0

あまりにも素早く入力して編集してくれてありがとうございます;-) –

+0

@ jack:言い換えれば、そのインターフェース(GrannySmith)を実装するクラスを実装し、そのクラスのオブジェクトを作成してメソッドに渡します:** DoDomething新しいGrannySmith()); ** – k3b

+0

yupありがとう...しかし、nullを取得しています例外は、このメソッドを実行している間に処理されていません私はこのインターフェイスを渡すしようとしています...何が問題がありますか? – jack

6

可能ですが、あなたが以下のクラスがあるとしましょう:

public interface IApple{ 
    int I {get; set;} 
    int J {get; set;} 
} 

public class GrannySmith : IApple{ 

    public GrannySmith() 
    { 
     this.I = 10; 
     this.J = 6; 
    } 
    int I {get; set;} 
    int J {get; set;} 
} 

public class PinkLady : IApple{ 

    public PinkLady() 
    { 
     this.I = 42; 
     this.J = 1; 
    } 
    int I {get; set;} 
    int J {get; set;} 
} 

public class FruitUtils{ 
    public int CalculateAppleness(IApple apple) 
    { 
     return apple.J * apple.I; 
    } 
} 

今どこかのプログラムであなたが書くことができます:

var apple = new GrannySmith(); 
var result = new FruitUtils().CalculateAppleness(apple); 
var apple2 = new PinkLady(); 
var result2 = new FruitUtils().CalculateAppleness(apple2); 

Console.WriteLine(result); //Produces 60 
Console.WriteLine(result2); //Produces 42 
+1

なぜ拡張メソッドとしてCalculateApplenessを作らないのですか: –

+0

public int CalculateAppleness(GrannySmith gs)を使うのは間違いでしょうか?概念上の違いは何ですか? – mko

+1

@mko明確にするために別のリンゴを追加しました。 'CalculateAppleness'を' IApple'の代わりに 'GrannySmith'のインスタンスにすると、ピンク色の女性リンゴのアピール度を計算できなくなります。違いを見ます? –

関連する問題