[英]c# Object Oriented Programming issue
class Program
{
static void Main(string[] args)
{
Master m = new Master(37);
Content c = new Content(m);
}
}
我定義了兩個類。 第一個如下:
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
with外部訪問該類
Containing.Nested obj = new Containing.Nested();
包含類的行為類似於命名空間。 對於其他嵌套類型也是如此。 如果嵌套類型與包含類緊密綁定,我只會使用嵌套類型。 一個很好的例子是僅在特定類中使用的enum
。
public class SomeData
{
public enum MyValueType
{
Aaa, Bbb, Ccc
}
public MyValueType MyValue { get; set; }
}
您的Content
類可能就是這種情況。 由您來決定是否使您的代碼更易於理解和更好的結構化。
我通常只使用嵌套類,如果一個類完全是另一個類的實現細節 - 在這種情況下我將嵌套類設為私有。 如果一個類需要在另一個類之外使用,那么在這種情況下我通常不會有嵌套類。
例外可能是適用於另一個類,委托簽名或EventArgs派生類的枚舉。
但是,在大多數情況下,它的風格。 如果您發現嵌套在另一個類中的一個類提供了更好的可讀性或可維護性,那么它實際上是個人選擇。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.