2010-02-14 30 views
3

我有一個名稱空間Company.Controls,它包含幾個控件。我也有一個名爲「Common」的類,其中包含我在整個控件中使用的枚舉/結構/靜態方法。如何使對象屬於命名空間(VS 2008)?

有沒有辦法讓這些「通用」peices屬於Company.Controls命名空間這種方式我不必繼續輸入「Common.Structure」?基本上他有一個「共同」的名稱空間和一個類。

閱讀代碼時看起來很混亂和混亂。

例(所有其他控制都在Blah.Controls.Common命名空間)

namespace Blah.Controls 
{ 
    public enum ControlTouchState 
    { 
     Down = 0x00, 
     Up = 0x01, 
    } 

    public Common() 
    { 
     //Stuff here 
    } 

} 

感謝。

+0

對不起,忘了提困難的部分,靜態方法,我知道枚舉ñ東西,你可以再補充。 – Dave 2010-02-14 03:55:48

+0

只是看起來很醜而已。當我可以擁有布拉時,有Common.Blah到處都有。 – Dave 2010-02-14 03:58:46

+0

您的頭銜已關閉。一個對象不屬於名稱空間只有類和其他類型 – 2010-02-14 15:41:18

回答

1

你不能得到你想要的;在C#中,所有方法都必須在一個類中。

取決於什麼是你常見類,您可能能夠通過使用擴展方法來找到一個稍微滿意的東西:

namespace Blah.Controls 
{ 
    public class CommonControl { } 

    public static class Common 
    { 
     public static void Foo(this CommonControl cc) { } 
    } 

    public class Control1 : CommonControl 
    { 
     public void Bar() 
     { 
      this.Foo(); 
     } 
    } 
} 

你可以考慮使用partial類這將讓另一件事你在別處寫簡單的包裝:

namespace Blop.Controls 
{ 
    public static class Common 
    { 
     public static void Foo() { } 
    } 

    public partial class Control1 
    { 
     public void Bar() 
     { 
      Foo(); 
     } 
    } 

    public partial class Control1 
    { 
     public void Foo() 
     { 
      Common.Foo(); 
     } 
    } 
} 

顯然,引入一些繼承可以消除一些重複;我假設你不想這樣做。

0

是否有某些原因造成Common中的嵌套類型必須嵌套?爲什麼不將它們分離到自己的名稱空間中?

namespace Common 
{ 
    public struct Structure 
    { 
     // ... 
    } 

    public enum Enumeration 
    { 
     // ... 
    } 

    public class Common 
    { 
     // ... 
    } 
} 

然後,您可以使用通用的命名空間,例如:

namespace Blah.Controls 
{ 
    using Common; 

    class Control 
    { 
     Struct myStruct; 
     Enumeration myEnum; 
     Common myCommon; // references the class, not the namespace 
    } 
} 
+0

正如他所說,困難的部分是* Common *類中的靜態方法。他不想在'Common'類以外的任何地方輸入Common.Foo()。 – 2010-02-14 04:46:16

+0

他沒有專門針對靜態方法,因爲它是最困難的......他只是同樣提到了結構,枚舉和靜態方法。顯然,靜態方法沒有什麼可以做的,但是,創建Common命名空間意味着你不需要像下面這樣的東西:Company.Controls.Common.Foo(new Company.Controls.Common.Struct {...}, new Company.Controls.Common.Enumeration {...}); – jrista 2010-02-14 05:00:08