4
public interface IMyInterface
{
   List<string> MyList(string s)
}

public class MyClass : IMyInterface
{
   public List<string> MyList(string s)
}

違いは何ですか:

[Method]
MyClass inst = new MyClass();
...

または:

[Method]
var inst = new MyClass() as IMyInterface;
...

または:

[Method]
IMyInterface inst = new MyClass();
...

IMyInterfaceの実装を使用する適切な方法は何ですか?

4

2 に答える 2

9

2番目は恐ろしいです。それは本当に同等です

IMyInterface inst = new MyClass();

MyClassしかし、それはインターフェースを実装していることさえチェックしません。これは単なる使用方法ですvarが、他の場所でタイプを明示的に指定します。いや。

一般に、(上記のように、または3番目のオプションのように)インターフェイスタイプを使用して変数を宣言する方が、信頼できるすべての場合はよりクリーンです-クラスによって宣言された追加のメンバーは必要ないことがユーザーに明確になります。「インターフェースにプログラムすることはどういう意味ですか?」を参照してください。詳細については。

これは、インターフェースの実装とは何の関係もないことに注意してください。インターフェイスを実装MyClassするクラスです。これは、インターフェイスの実装を使用することと関係があります。

于 2012-10-09T16:50:31.543 に答える
5

MyClass inst = new MyClass();

具象型を使用してオブジェクトを作成します。ポリモーフィズムは達成できません。

var inst = new MyClass() as IMyInterface

コンパイラーは、キャストとvarを使用して、どのタイプに基づいているかを推測できます。タイプはIMyInterfaceです...

IMyInterface inst = new MyClass();

私の意見では最高です。MyInterfaceを使用することで、実行時にinstが指すものを変更してポリモーフィズムを実現できます。

于 2012-10-09T16:50:40.793 に答える