[英]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.