[英]Interfaces cannot declare types
我在另一个程序集中的方法使用的 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
ThingStatus
应该可以解决问题。
enum ThingStatus { Accepted, Denied, Pending };
public interface Thing
{
ThingStatus status { get; }
etc...
}
哦,是的,如果您需要这样的实现,解决方案是使用抽象类。 抽象类不是一个糟糕的设计,在这种情况下肯定很有用。
如果您坚持使用接口,恐怕您必须采用pswg 的解决方案并违反一两条规则(无论如何,这些只是指导方针,真的)。
abstract
类和interface
是不同的东西。 abstarct
类是抽象的,高于你的领域模型,接口是你领域实体的契约(行为)。 您可以根据需要在解决方案中同时使用两者。 在具体场景中, status
不是行为,它只是实体的状态。 我认为抽象类是更可靠的选择。
您必须在命名空间内或命名空间外将类型声明为公共类型,然后在接口中声明该类型的方法
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.