c#面向对象编程问题
问题描述:
class Program
{
static void Main(string[] args)
{
Master m = new Master(37);
Content c = new Content(m);
}
}
我有两个定义的类。首先如下:c#面向对象编程问题
internal class Content
{
private Master _parentMaster;
private Content _contentChildren;
#region Constructor
internal Content(Master master)
{
this._parentMaster = master;
}
internal Content(Master master, long contentId)
{
this._parentMaster = master;
_getContent(contentId);
}
#endregion
#region Private Methods
private void _getContent(long contentId)
{
contentRepository.getContent(contentId, _parentMaster.MasterId);
}
#endregion
#region Internal Methods
internal void AddContent()
{
// code omitted
}
internal void UpdateContent()
{
// code omitted
}
internal void GetChildren()
{
// code imitted
}
internal void GetRootContent()
{
// code omitted
}
#endregion
#region Properties
// code omitted
#endregion
}
,第二个:
public class Master
{
private MasterEntities _master;
private List<Master> _masters;
#region Constructor
internal Master()
{
_master = new MasterEntities();
}
internal Master(long masterId)
{
_getMaster(masterId);
}
#endregion
#region Private Methods
internal void _getMaster()
{
// code omitted
}
#region Properties
internal long MasterId
{
get
{
return _master.id;
}
set
{
_master.id = value;
}
}
// code omitted
#endregion
}
这是实行两班的正确方法是什么?或者将会更好地实现嵌套类?如果是的话,如何在嵌套类中获得与“Main”中相同的结果?
答
无论你是否嵌套类都没有太大区别。它只会改变你访问类的方式,但不会改变类的行为。嵌套类除非有引用,否则不会看到封闭类的成员。
说,我们有这个嵌套类
public class Containing
{
public class Nested
{
}
}
现在你可以用
Containing.Nested obj = new Containing.Nested();
包含类的作用类似于一个命名空间访问从Containing
外的类。对于其他嵌套类型也是如此。如果嵌套类型严格绑定到包含类,我只会使用嵌套类型。一个很好的例子是enum
只用于特定的类。
public class SomeData
{
public enum MyValueType
{
Aaa, Bbb, Ccc
}
public MyValueType MyValue { get; set; }
}
这可能是您的Content
类的情况。这取决于你是否让你的代码更易于理解和更好的结构化。
答
我通常只使用嵌套类,如果一个类完全是另一个类的实现细节 - 在这种情况下,我使嵌套类是私有的。如果一个类需要在另一个类之外使用,那么在这种情况下我通常不会有嵌套类。
异常可能是适用于其他类,委托签名或EventArgs派生类的枚举。
但是,它的大部分风格。如果你发现一个类嵌套在另一个类中提供了更好的可读性或可维护性,那么这是一个真正的个人选择。
为什么不公开内容作为主人的财产? – Aphelion 2012-07-20 15:06:12
@Aphelion这将是可行的,但如果主人可以拥有多个内容呢?这是一个1到多个设置,我可以看到适当的。 – seekerOfKnowledge 2012-07-20 15:20:28
@seekerOfKnowledge好的建议。它可以实施为“IList”。其实在这种情况下,我会建议'复合模式'。 –
Aphelion
2012-07-20 15:22:14