2016-06-09 26 views
0

所以我們可以說我有這個枚舉彙編答:爲什麼無法引用枚舉作爲參數而不引用包含它的程序集?

// In assembly A 
public enum MyEnum { MyValueA = 1, MyValueB = 2 } 

而且在程序集B這種方法(組件B具有裝配A作爲參考)

// In Assembly B 
public void DoSomething(MyEnum value) 
{ 
    // Do Something 
} 

如果我知道這個價值,我」引用程序集B的m編碼程序集C是否有原因導致我無法做到這一點?有沒有辦法做到這一點?

// In assembly C 
DoSomething(1); 

我知道這不是一個好的做法。

非常感謝!

編輯:大部分我想知道爲什麼我不能。我知道有100種方法,但我想知道一個沒有觸及程序集A並且不添加對任何東西的引用。

+0

都引用您將需要引用組件中的自組裝Ç不知道枚舉。 – Botonomous

+0

@自治是的,我知道。但枚舉被存儲和傳遞爲整數。我想知道爲什麼這種行爲不被接受;) – Gaspa79

+0

儘管它們是值級別的整數,但它們仍然是它們自己的類型,並且存在於單獨的名稱空間中。 – Botonomous

回答

1

枚舉可以用int表示,我們可以得到它。枚舉的實際「選擇」雖然由程序集A定義,但如果程序集C需要枚舉,如果不引用程序集A,它將如何知道什麼是有效值?你的枚舉不是框架中已知的類型,那麼C怎麼可能沒有參考就知道它呢?

你要麼需要有從C到組件A的引用,或也許會讓可能含有枚舉另一個組件,並通過A和C.

0

你可以把int作爲參數而不是Enum。彙編A的enum傳遞的值應該是正確的,但是彙編B會編譯,因爲它不需要知道MyEnum類型

+0

我完全同意。但是,這會打破程序集B中的現有調用,並且如果您確實希望可以重載程序集A中的方法,但是如果我不想同時更改這兩個方法,該怎麼辦? (我只能訪問程序集C) – Gaspa79

+1

這也違背了使用枚舉的目的。 – Botonomous

+0

@自治我不是那個決定應該這樣的人;)。如果這取決於我,我會在那裏添加參考和繁榮。 – Gaspa79

相關問題