アプリ版:「スタンプのみでお礼する」機能のリリースについて

お世話になります。
C#でインターフェースに定義した抽象プロパティで、アクセシビリティまで設定したいです。
例として抽象プロパティHelloのgetをpublic、setをinternalに設定したい場合、次の様に書くと怒られます。
string Hello { get; internal set; } ←"アクセシビリティ修飾子をインターフェイスのアクセサーで使用することはできません。"
抽象プロパティにsetを定義せず、サブクラスでinternalを設定して実装する分には怒られませんが、
この場合はサブクラスに対してsetの実装を強制できませんし、
当然API(インターフェース)型変数からsetの実装を呼び出せません。

全てのクラスはAPIからのみ利用させたいと考えていて、
かつプロパティのset、getで設定したいアクセス修飾子が異なる様な場合、
プロパティを使用せず自前でアクセッサを作るしか無いのでしょうか?
何かおいしい逃げ方がありましたらご教示いただけるとありがたいです。
宜しくお願いします。

A 回答 (2件)

「インターフェイス」に定義するものは公開するもの、つまりアクセシビリティは常にpublicですからこれはどーしよーもありません。



代替案としては、インターフェイスではなく抽象クラスに定義して、その抽象プロパティのモディファイア(set)にうっかり飛んできたら例外でも飛ばすようにしておくなんてのはどうでしょうか。
    • good
    • 0
この回答へのお礼

確かにおっしゃる通りです。
自分が定義を勘違いしていたふしがあったようです。
そもそも私が「メソッドでやるしか」とかなんとかのたまっていましたが、
そもそもメソッドでやっても同じ事でした。
代替案をいただきます。
インターフェイスと抽象クラスとで定義を分けて、
万が一の予期しない使用に対してはアサートで落とすという方向で検討しようと思います。
ご回答ありがとうございました。

お礼日時:2011/04/19 16:33

interfaceを二つ用意する



public interface IHelloGet{string Hello { get;}}
internal interface IHelloGetSet{string Hello { get; set;}}
    • good
    • 0
この回答へのお礼

なるほど、そういう手もありましたか。
今回はコミットできませんが、今後の肥やしとさせていただきます。
ご回答いただき、ありがとうございました。

お礼日時:2011/04/19 16:23

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!