[解決済み】なぜC#のインターフェースはフィールドを含むことができないのですか?
2022-04-03 04:09:44
質問
例えば
ICar
インターフェイスを実装し、すべての実装にフィールド
Year
. これは、すべての実装が個別に
Year
? 単純にインターフェイスで定義した方が良いのでは?
どのように解決するのですか?
他の多くの回答は意味レベルでは正しいのですが、私はこの種の質問に実装の詳細レベルからアプローチすることも面白いと思っています。
インターフェースは スロット を含む。 メソッド . クラスがインターフェースを実装するとき、クラスはランタイムに必要なすべてのスロットをどのように埋めるかを伝える必要があります。というとき
interface IFoo { void M(); }
class Foo : IFoo { public void M() { ... } }
このクラスでは、「私のインスタンスを作成したら、IFoo.MのスロットにFoo.Mへの参照を挿入してください。
そして、呼び出しを行うと
IFoo ifoo = new Foo();
ifoo.M();
というコードを生成します。
インターフェイスがメソッドを含むスロットの集合体であるなら、それらのスロットのいくつかは、プロパティのgetとsetメソッド、インデクサのgetとsetメソッド、イベントのaddとremoveメソッドも含むことができます。 しかし フィールドはメソッドではありません。 . フィールドに関連付けられたquot;スロット"はなく、フィールドの位置への参照でquot;フィルイン"することができるのです。したがって、インターフェースはメソッド、プロパティ、インデクサ、イベントを定義することができますが、フィールドを定義することはできません。
関連
-
[解決済み】インデックスが範囲外でした。コレクションパラメータname:indexのサイズより小さく、非負でなければなりません。
-
[解決済み] IDisposable インターフェースの正しい使用法
-
[解決済み] なぜList<T>を継承しないのですか?
-
[解決済み] インターフェースと抽象クラス(一般的なOO)
-
[解決済み] Entity Framework 5 レコードを更新する
-
[解決済み] C#でメソッドをパラメータとして渡す
-
[解決済み] コンストラクタのシグネチャを定義するインターフェース?
-
[解決済み] Javaインターフェースでスタティックメソッドを定義できないのはなぜですか?
-
[解決済み] C#4 インターフェースで定義されたオプションパラメータは、なぜ実装クラスで強制されないのですか?
-
[解決済み】TypeScriptのインターフェースと型について
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】C#におけるtypedefの等価性
-
[解決済み] 保護レベルによりアクセス不能になりました。
-
[解決済み】"The ConnectionString property has not been initialized "を修正する方法
-
[解決済み】MetadataException: 指定されたメタデータ・リソースをロードできない
-
[解決済み】Visual studio 2019がデバッグ時にフリーズする件
-
[解決済み】Moqを使用してメソッド呼び出しを検証する
-
[解決済み】aspNetCore 2.2.0 - AspNetCoreModuleV2 エラー
-
[解決済み] 関数を終了するには?
-
[解決済み】別のスレッドがこのオブジェクトを所有しているため、呼び出し側のスレッドはこのオブジェクトにアクセスできない
-
[解決済み】Nullableオブジェクトは値を持たなければならない?