私は別のアセンブリのメソッドで使用されるAPIに抽象クラスを持っています。私はその後、事がインターフェースだった場合、それはより良いデザインだろうことを決めたインターフェイスは型を宣言できません
abstract public class Thing
{
public enum Status { Accepted, Denied, Pending };
abstract public Status status { get; private set; }
etc...
}
:クラスは、その中に定義されたネストされた列挙型、このようなビットを持っています。しかし、私はこれを行うことはできません。
public interface Thing
{
enum Status { Accepted, Denied, Pending };
Status status { get; }
etc...
}
これはエラーメッセージ生成「のインターフェイスは、型を宣言することはできませんが。」しかし、インターフェイスの外でenumの定義を動かすと、カプセル化が破られてしまいます(Status型は本当にThingに属し、意味がありません)。もっと重要なのは、これを使用する他の多くのアセンブリです。あなたはどんな解決策も考えられますか?
カプセル化を使用してカプセル化することはできませんが、あなたはクラスとして「Thing」のままにしておいてください。抽象基本クラスには何も問題はありません。 –
この非常に疑問が尋ねられた他の場所がいくつか見つかりましたが、このコメントには良い選択肢があります。 http://social.msdn.microsoft.com/forums/en-US/csharpgeneral/thread/14beb8d1-63d9-42f7-b036-eb9ebb106d08 基本的には、別の場所で列挙型を宣言するか、代わりにクラスを使用することができますインターフェイスの....それはそれについてです。あなたがしようとしていることを正確に行う方法はありません。 – Nevyn
"カプセル化"の議論は私の論証ではなく、とにかく公に入れ子にされた型を取り除くよう助言します。もしそれが世界にさらされることができれば、そのように扱います。 –