12,788
回編集
510行目: | 510行目: | ||
* as判定用に、interface IX { object X { get; } } | * as判定用に、interface IX { object X { get; } } | ||
* 手動で使用するためにジェネリックも記述して、interface IX<T> : IX { new T X { get; } } | * 手動で使用するためにジェネリックも記述して、interface IX<T> : IX { new T X { get; } } | ||
<br><br> | |||
== インターフェイスの標準実装 == | |||
C# 8.0(.NET Core 3.0)では、以下に示すように、インターフェイスの制限が緩和された。<br> | |||
* メソッド、プロパティ、インデクサ、イベントのアクセサの実装を持つことができる。 | |||
* アクセシビリティを明示的に指定できる。 | |||
* 静的メンバを持つことができる。(入れ子の型も含む) | |||
<br> | |||
機能面では、クラス(特に、抽象クラス)との差は、<u>フィールドを持つことができない代わりに多重継承できる</u>程度である。<br> | |||
フィールドは、多重継承(特に、ひし形継承)との相性が悪くメリットが少ないため、これ以上の制限は緩和されない。<br> | |||
<br> | |||
以下に、クラスと異なる部分を示す。<br> | |||
* アクセシビリティ未指定の場合等、既定の挙動が異なる。 | |||
* 派生インターフェイスでのオーバーライドは明示的実装が必須。 | |||
* 標準実装を持つメンバは、派生クラスまたは派生インターフェイスから直接呼べない。(親へのキャストが必要) | |||
<br><br> | <br><br> | ||
__FORCETOC__ | __FORCETOC__ | ||
[[カテゴリ:C_Sharp]] | [[カテゴリ:C_Sharp]] |