簡體   English   中英

接口不能聲明類型

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM