如果我在一个彼此相关的类中有常量,让我们说用于写入/读取MyClass的Xml文件的字符串,我应该将它们包装在MyClass中的嵌套类Xml中吗?或者只是定义它们而不包装在MyClass中?如果将它们包装起来是个好主意而不是外部世界只能访问那些常量的一部分,例如只有Xml.Name,其余的是MyClass用于重新创建对象的Xml属性,我会设置什么我的嵌套类的保护级别为?
答案 0 :(得分:0)
我认为没有必要将常量移动到嵌套类。
<强>辅助强>
只需要 MyClass * private *。的常量
只需要与 MyClass * internal *。中的类相同的类所需的常量
只需要 MyClass 的子类和 MyClass 本身 protected 的常量。
只有与 MyClass 在同一程序集中的类或 MyClass 的子类以及 MyClass 本身内部受保护的。
除了 MyClass 的一个 public 之外,其他程序集中的类也需要使用常量。
<强>命名:强>
如果一个类中有许多常量,请使用好的前缀对它们进行分类。因此读者可以更快找到正确的。
答案 1 :(得分:0)
我认为nested-class
是一个只在另一个对象的上下文中有意义的对象;并且其逻辑需要该另一个对象的属性。鉴于此,我从未设计过nested-class
我以后不会重构的public nested-class
。而且我认为需要const
作为设计问题的红旗。
无论如何,你的问题让我考虑它们是否有用。所以即使我不会使用这种设计,它也可能适合你。
我确实想提一下Xml.Name
只能用于永不改变的事情。就像一天中的小时或光速。我无法从你的问题中准确地说出来,但像readonly
这样的东西似乎是可变的。我建议使用static readonly
来表示这些属性。可能是class
,如果它们在所有实例中都是一致的。这将引导您清除many pitfalls of const
。
以下是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;
}
}
}
我嘲笑以证明我对您的设计推荐的内容:
{{1}}