2011-04-13 5 views
2

私は抽象的であったのと同じように、インターフェイスの行為のメンバーを知っていますが、実際は抽象的ですか?私はそのキーワードを使用する必要はないので、その暗黙的であるのか、それとも技術的に抽象的でないのか分かりません...インターフェイスメンバは抽象化されていますか?

答えて

5

これらは抽象的なものではなく、インタフェースによって定義されたコントラクトです。 「抽象」はクラスにのみ適用される特定の意味を持ちます。

これは、クラス内の抽象メンバと非常によく似た働きをします。インターフェイスを実装するすべての型は、メンバを実装するか、抽象的なものでなければなりません。

0

これらのキーワードは暗黙のうちに定義されているため、メンバーの署名のみが記述されます。

私はILでどのように見えるかわかりません(実際には知る必要はないでしょう)。

2

インターフェイスを実装するクラスは、すべてのメンバーを実装するか、またはabstractと宣言する必要があるため、これらは抽象概念です。

abstractのように、技術的な意味ではabstractではありません。

2

いいえ。抽象メソッドは暗黙的に仮想です。

インターフェイスの実装は仮想である必要はありません。

は実際には、これは、vtable single dispatch [1]、単一のvtableスロットは二回充填することができないためでは可能ではないであろう。明示的に「競合」インターフェース同じ部材シグネチャを宣言する(すなわち、インタフェース)を実装することが可能です)

[1]仮想継承のための古典的な実装方法

+1

+1。良い呼び出し、それは重要な区別です。実際には、派生クラスが親クラスに実装されたインタフェースを再実装するところで、競合する*実装*を実装することもできます。喜びが続く。 –

+0

あまりにも真実。しかし、明示的なインタフェースの実装では、クライアントは通常、彼が知るIInterestingInterfaceしか取得しないので、クライアントはそれを知りません。 IMHOの明示的なインターフェイスは、少し古いものになっています:私は、クラスでそれらを使用する必要があることを感じました_closures_(3.5で修正された)またはJavaスタイルの非静的な内部(_nested_)クラス。 ..ああ、私たちが見逃していた喜びは、Enumerables、Queryables、Observablesの間の混乱によって大きく相殺されます。Observablesはすべて微妙に異なり、新しい陽気な意味の驚きを作り出します。将来の証拠! – sehe

関連する問題