C#8.0には、拡張の数を提供します
readonly
修飾子は、構造体の任意のメンバーに適用されます。 これは、メンバーが状態を変更しないことを示しています。 この比率はなり readonly
修飾子はで使用される struct
より洗練された声明。 次の変数を考慮してください。
パブリック 構造体ポイント { 公共 ダブル X { 取得します。セット; } 公共の 二重 Y { 得ます。セット; } 公共の 二重距離=> Math.Sqrt(X * X + Y * Y)。 パブリック オーバーライド 文字列のToString()=> $ " ({X}は、{Y})は、原点からの距離{}です" 。 }
同じ構造のほとんどのように、 ToString()
この方法は、状態を変更しません。 これは、することによって得ることができる readonly
ために修飾子を追加し ToString()
、このステートメントを示します。
公共の 読み取り専用 オーバーライド 文字列のToString()=> $は、" ({X}は、{Y})は、原点からの距離{}です"。
これらの変更は、ため、コンパイラの警告が生成されます ToString
アクセス Distance
としてマークされていない属性 readonly
:
CS8656警告:非ために呼び出して、読み取り専用メンバーを「Point.Distance.get 」 から「読み取り専用」メンバーの結果における暗黙のコピー「この」
あなたは、コンパイラの守備のコピーを作成する必要がある場合は警告を発行します。 Distance
プロパティは、状態を変更しない、することができるので readonly
、この警告文を修正するための修飾子を追加するために使用します:
公共の 読み取り専用 ダブルの距離=> Math.Sqrt(X * X + Y * Y);
ことに注意してくださいreadonly
読み取り専用属性のための修飾子が必要です。 その負いませんコンパイラ get
の状態を変更しないアクセスが、明示的に指定する必要があります readonly
。 コンパイラは、次のルールを適用します:readonly
メンバーが状態を変更しません。削除しない限り readonly
修飾子、それは次のメソッドをコンパイルしません。
公共の 読み取り専用の ボイド(翻訳INT xOffsetプロパティ、INT yOffsetの) { X + = xOffsetプロパティ。 Y + = yOffsetの。 }
この機能を使用するには、コンパイラが意図に基づく意思と最適化を強制することができ、設計意図を指定することができます。
あなたは今のインターフェイスにメンバーを追加し、これらの部材の実装を提供することができます。 この言語機能を使用すると、APIの作者は、現在実装されているこのインタフェースを持つソースまたはバイナリ互換性を破壊することなく、インターフェイスの新しいバージョンにメソッドを追加することができます。 既存の実装は、デフォルトの実装を継承します。 この関数は、C#はAndroidやスウィフトのためのAPIと相互運用することができます、そのようなAPIは、同様の機能をサポートしています。 デフォルトのインターフェイスのメンバーも同様の「機能」言語機能のプログラムをサポートしています。
デフォルトのインターフェイスのメンバーは、多くのプログラムや言語要素に影響を与えます。参照してください。デフォルトの実装の更新インタフェース。