接口不能声明类型

我在API中有一个抽象类,由另一个程序集中的方法使用。 该类在其中定义了嵌套枚举,有点像这样:

abstract public class Thing { public enum Status { Accepted, Denied, Pending }; abstract public Status status { get; private set; } etc... } 

然后,我决定如果Thing是一个界面,那将是一个更好的设计。 但我不能这样做:

 public interface Thing { enum Status { Accepted, Denied, Pending }; Status status { get; } etc... } 

这会产生错误消息“接口无法声明类型”。 但是,如果我在接口之外移动枚举的定义,首先我要打破封装(Status类型真的属于Thing并且本身没有意义)更重要的是我必须去修改代码使用它的许多其他程序集。 你能想到任何解决方案吗?

如错误所示,您只需在接口外部提取Status的定义即可。 我知道它打破了封装,但实际上没有办法解决这个问题。 我建议你将Status的名称更改为与Thing有很强关系的ThingThingStatus应该这样做。

 enum ThingStatus { Accepted, Denied, Pending }; public interface Thing { ThingStatus status { get; } etc... } 

哦,是的,如果您需要这样的实现,解决方案是使用抽象类。 抽象类不是一个糟糕的设计,在这种情况下肯定是有用的。

如果你坚持使用接口,我担心你必须使用pswg的解决方案并打破一两条规则(这些只是指导方针,真的)。

abstract类和interface是不同的东西。 abstarct类是抽象,高于您的域模型,接口是您的域实体的契约(行为)。 您可以根据需要在解决方案中使用它们。 在具体方案中, status不是行为,而只是实体状态。 我认为抽象类是更可靠的选择。