いくつかのクラスによって継承される1つのインターフェイスがありますが、一部のプロパティはクラスのコンストラクタによってのみ設定されます。私はコンストラクタの外にあるプロパティの値を変更することはありませんので、プロパティをプライベートなセッタで制限したいのですが、インターフェイスではどのタイプの修飾子でもプロパティを使用できません?あなたのインターフェイスでC#インターフェイスのプロパティを制限する方法
答えて
インターフェイスには、実装するすべてのタイプで実行可能でなければならないことが記述されています。定義できないのははできません。
インターフェイスは、適切な名前とタイプの指定されたプロパティゲッターが存在しなければならないことを定義することができ、それはそのプロパティのパブリックセッターがないなければならないことを指定することはできません。あなたは確かだ
は、このインタフェースが実装者が民間のセッターを持っていること、または、彼らは決してコンストラクタの外で変更する値を許可していないにもいることを示唆して文書を提供するために歓迎するが、そのような制約を指定するためのインタフェースのための方法はありません。
指定するのみゲッター:コンパイラおよび言語上のこれらのプロパティの不変性を強制する方法はありません
class Foo : ISomeInterface
{
public int SomeProperty { get; private set; }
public Foo()
{
SomeProperty = 42;
}
}
これは、プロパティゲッターをプライベートにすることを強制しません。プライベートであることを許可します。 – Servy
@Servyは、プロパティのゲッターをプライベートにすることができれば、何が変わるかを明確にすることができますか? – PreqlSusSpermaOhranitel
@PreqlSusSpermaOhranitelこれは、値をコンストラクタの外で変更できるようにするインターフェイスの実装を作成できなかったことを意味します。 – Servy
:
interface ISomeInterface
{
int SomeProperty { get; }
}
あなたの実装が非公開に設定するのは自由ですレベル。
つまり、これらのプロパティの不変性が許可されている唯一のものではなく、クラスのパブリックセッターを持たないようにインターフェイスを書く方法はありません。
この言語には、この要件を表現するための構文はありません。
あなたセッターせずに、あなたのインターフェイスでプロパティを宣言することができますが、
その価値をしてください変更することはありません
- は何のセッターを持っていないに実装の実際のプロパティを必要とすることはできませんインターフェイスを介して実装クラスのみを公開すると、インターフェイスで宣言したアクセスメソッドのみが使用可能になることに注意してください。言い換えれば、インターフェースがゲッターを宣言するだけであれば、インターフェースを通して値を設定することはできません。
あなたの最良の選択肢は、インタフェース契約のこの部分を単に文書化することです。このインタフェースを実装する人は、あなたの意図とガイドラインに従ってください。
- 1. インターフェイスのメソッドの属性を制限する方法
- 2. CakePHPページ制限インターフェイス
- 3. インターフェイスのC#プロパティ
- 4. VB6でのインターフェイスの制限
- 5. 他のプロジェクトのプロパティの使用を制限する方法
- 6. プロパティ型Guidのシリアル化を制限する方法は?
- 7. C#インターフェイスの制約
- 8. 特定のクラスのインターフェイスでJavaジェネリック型パラメータを制限する方法
- 9. 継承されたプロパティへのアクセスを制限するC#
- 10. hrefのテキスト長制限を制限する方法
- 11. C++コアクラスの可視性を制限してクリーンなインターフェイスを提供する
- 12. Cでインタフェースの実装を制限する方法
- 13. プロパティがgroovyのスペースを制限するかどうかをチェックする方法?
- 14. 一般的なインターフェイスの制限T
- 15. Android:制限同期を制限する方法
- 16. OWLプロパティの制限とSHACL
- 17. SQLテーブルの無制限プロパティ
- 18. スレッドの数を制限する方法
- 19. テキストの幅を制限する方法
- 20. Javaのファイルサイズを制限する方法
- 21. フッタの幅を制限する方法
- 22. コンテンツの幅を制限する方法
- 23. JavaScriptのイベントを制限する方法
- 24. 列の値を制限する方法
- 25. APIのレートを制限する方法
- 26. ウェブサイトのランドスケープモードを制限する方法
- 27. 角度カスタム入力コントロールの入力プロパティ値を制限する方法は?
- 28. Androidのインターフェイス - TextViewsをScrollboxに制限する
- 29. インターフェイスの関数引数を制限する
- 30. 特定のインターフェイスでlambdaを制限する
おそらくインターフェイスからセッターを削除しますか? –
あなたの意図を文書化する以外に、インタフェースを実装する人があなたのガイドラインに従うことを望むことはできません。 –
あなたが持っているものとあなたが望むものをより良く見せるためには、[mcve]を打ちます。 – Nkosi