BT

最新技術を追い求めるデベロッパのための情報コミュニティ

寄稿

Topics

地域を選ぶ

InfoQ ホームページ ニュース C#のデフォルトインターフェイスメソッドの更新

C#のデフォルトインターフェイスメソッドの更新

原文(投稿日:2019/06/14)へのリンク

Default Interface Methodsのサポートが完成に近づくにつれて、潜在的な問題が提起された。多くのことが達成されているが、これは複雑な機能であり、細部の多くはまだ解決されていない。しかし、最初に、ここに解決された質問のいくつかがある。

静的フィールドとconstフィールドはインターフェースで許可される。

==と!=以外の演算子は、インタフェースで実装できる。クラスで定義された演算子は、インターフェイスで定義された演算子より常に優先される。それは後者がより具体的であってもである。同様に、インタフェース内の適用可能な演算子は、基本インタフェース内の演算子を隠す。

以下のステートメントを確実にするために、基本クラスのメソッドを呼び出すときにクラスをスキップすることが可能になった。

Typeがクラス型である新しいbase(Type)構文を使用することを承認したと思います(たとえば、baseをスキップしてbaseのbaseを呼び出すなど)が、それを明確に確認する必要があります。また、base(Type).M()が非バーチャルメンバーMを参照していることを確認する必要があります。また、アクセシビリティの要件があることを確認する必要があります。この検索で見つかったMは、呼び出しが発生した場所(つまり通常の名前検索制約)でアクセス可能でなければなりません。

暫定的に承認されたままであるが、インターフェース内でprotectedメソッドを宣言する機能についてはまだ疑問がある。

クラスがメソッドを実装していても、そのサブクラスがそれを抽象としてマークするとき、これは「再抽象化」と呼ばれる。これはJavaの相互運用性のために必要であるが、正確な構文はまだ解決されていない。基本的に、問題はabstractキーワードが必要かどうかである。また、彼らは「ランタイム[チーム]が再抽象化を実装することに同意することを保証する必要がある」。

インタフェースの通常のプロパティは、クラスの自動実装プロパティのように見えても抽象である。しかし、プロパティが静的であるならば、それは抽象にはなり得ない。それは、インターフェイスで宣言された静的プロパティがデフォルトで自動実装されることを意味するか。

アクセシビリティ修飾子がないため、クラス内の部分メソッドはプライベートであると見なされる。しかし、インターフェースでは、アクセシビリティ修飾子がないということは、そのメソッドがpublicであることを意味する。インタフェースにおける部分メソッドのルールは何か。privateキーワードを許可、禁止、要求するか。

デフォルトのメソッドの中では、object.MemberwiseClone()はアクセス可能か。

最後に、機能の正式名称をRuntimeFeature.DefaultInterfaceImplementationと呼ぶべきか。答えは、「LDMはその名前が何であるかを気にしません」。

この記事に星をつける

おすすめ度
スタイル

BT