1

インターフェイスはデータを含まないが動作とプロパティを公開する抽象型であり、オブジェクトのインスタンスはメモリ内に存在するオブジェクトの出現またはコピーであることを理解しています。

コンパイラ/基になるコードが2つを処理する方法の違いについて疑問に思っていますか? これに対する答えに基づいて、インターフェイスを具体的なインスタンスではなくオブジェクトへの依存関係として渡すと、コードがより疎結合になるのはなぜですか? の具体的なインスタンスで定義されたメソッドではなくDoSomething、インターフェイスで定義されたメソッドを呼び出した場合の違いは何ですか?MyClassDoSomethingMyClass

4

3 に答える 3

1

インターフェイスとは何かを理解しているとおっしゃっていたと思いますが、2番目の質問と最初の質問をリンクした方法を考えると、それが完全に正しいのではないかと思います。2つ目は、1つ目の知識がなくても答えることができ、それによって影響を受けることもありません。

特に、なぜそれがより緩く結合されているのかという問題については、コンパイラの実装などとは何の関係もありません。それは単なるソフトウェアアーキテクチャです。

インターフェイスは、メソッド/プロパティの存在以外に実装タイプに制限を課しません(技術的にはメソッドでもあります)。

実装は、型自体でパブリックである必要はなく、型に特定のコンストラクターなどが必要でもありません。さらに重要なのは、クラスである必要さえないということです。次に、(むしろエッジケースの)インターフェースを使用すると、単一のタイプが同じインターフェースの複数の実装を持つことができるということがあります。

基本クラスを使用するとすぐに、他の制限が大量に発生する可能性があります。

確かに、これらも明らかに良いことです。たとえば、既知の具象ベースが(一貫性のために)不変であることがわかっていて、コンストラクターなどで「null」を許可しない場合(すべてインターフェースを介して強制することはできません)。

于 2012-04-24T11:00:35.580 に答える
0

インターフェイスまたは抽象クラスの多くの実装(具象インスタンス)を持つことができます。

一般に、具体的なクラスではなく、インターフェイスを使用してクラス階層を受け入れるメソッドを定義する必要があります。これにより、それらは汎用になり、定義する新しい実装ごとに書き直す必要がなくなります。

基本クラスまたは派生クラスでメソッドを呼び出すと、メソッドを正しくオーバーライドすることを前提として、同じメソッドを呼び出す必要があります。

于 2012-04-24T10:40:13.193 に答える
0

実装の詳細については、MSDN マガジンの記事「Drill Into .NET Framework Internals to See How the CLR Creates Runtime Objects」を参照してください。
ランタイムがインターフェイスをサポートする必要がある主な理由は、コンパイル時間が異なるアセンブリが実行時に相互に接続する可能性があるという事実に特に関連していると思います。

于 2012-04-24T10:52:35.493 に答える