2012-02-27 62 views
2

如果我有一個相互關聯的類中的常量,可以說用於爲MyClass編寫/讀取Xml文件的字符串,是否應該將它們包裝在MyClass中的嵌套類Xml中?或者只是定義它們而不包裹在MyClass中?如果包裝它們比如果只有部分這些常量應該可以被外部世界訪問是一個好主意,例如只有Xml.Name,其餘的是MyClass將用於重新創建對象的Xml屬性,那麼我應該如何設置我的嵌套類的保護級別爲?類特定常量是否應該包裝在嵌套類中?

+0

我沒有對是否應該使用嵌套類或沒有意見,但如果你那麼我應該認爲嵌套類將是公共的,外部可見成員是公共內部成員和內部可見成員。 – allonym 2012-02-28 00:56:45

+1

請注意,可公開訪問的常量可能會導致一些奇怪的情況。使用你的程序集的程序集可以自由地將常量嵌入到它們自己的二進制文件中。結果是,即使您更改了它可能不會反映在使用您的代碼的程序集中的值(並且該代碼使用了新構建版本)。因此,當你希望公開你的常量時,靜態只讀是個好主意(當然,內部不會導致這個問題) – 2012-02-28 14:57:57

回答

0

我看到一個nested-class作爲一個對象,只有在另一個對象的上下文中才有意義;並且其邏輯需要該另一個對象的屬性。鑑於此,我從未設計過我以後不會重構的nested-class。而且我認爲需要一個public nested-class作爲一個陷入困境的設計的紅旗。

無論如何,你的問題讓我考慮它們是否可能有用。所以即使我不會使用這種設計,它可能適用於你。

我確實想提到const應該只用於永不改變的事情。就像一天中的幾小時或光速。我不能完全從你的問題中得知,但類似Xml.Name似乎是可變的。我建議對這些屬性使用readonly。可能的話,static readonly如果它們在所有實例中都一致。這將導致你清除many pitfalls of const

以下是class我嘲笑了證明什麼,我會建議爲你的設計:

public class MyClass 
{ 
    public string Title { get; set; } 

    Xml _xml; 
    public Xml MyXml 
    { 
     get { return _xml; } 
     set { _xml = value; } 
    }  

    public MyClass(string xmlName, object xmlAttributes) 
    { 
     _xml = new Xml(xmlName, xmlAttributes);   
    } 

     public class Xml 
     { 
      private readonly string _name; 
      public string Name 
      { 
       get { return _name; } 
      } 

      private readonly object _attributes; 
      internal object Attributes 
      { 
       get { return _attributes; } 
      } 

      public Xml(string name, object attributes) 
      { 
       _name = name; 
       _attributes = attributes; 
      } 
     } 
} 
0

我看不需要將常量移動到嵌套類。

無障礙:只有MyClass的 *私人*需要
讓常量。
僅使用與MyClass * internal *在相同程序集中的類所需的常量。
僅使用子常量MyClassMyClass本身保護
請常數僅由在相同組件MyClass的類或通過MyClass的亞類和由MyClass的本身內部保護需要。
Make常量也需要其他程序集中的類MyClass的一個public

命名:
如果你在一個類中使用前綴好很多常量類別他們。所以讀者可以更快地找到正確的。

+0

通常不會公開常量。跨裝配邊界的常量可以是「有趣的」(請參閱​​問題的評論) – 2012-02-28 14:58:58

+0

好的,然後*公共靜態只讀*。 – brgerner 2012-02-28 15:47:03

+0

@RuneFS * * protected *和* internal protected *還需要* static只讀*因爲子類可以在其他程序集中。 – brgerner 2012-02-28 15:57:27

相關問題