Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在C语言中设计集合#_C#_Oop - Fatal编程技术网

C# 如何在C语言中设计集合#

C# 如何在C语言中设计集合#,c#,oop,C#,Oop,我有一个班级MySet class MySet { ....... } 此类将声明对其他类型的引用 (即) 类型MySubset的目的是向用户提供“子集id”和整数集合 类型MySet 以下哪一项是正确的实施 (一) 类MySet { int mySetID; MySubSet subset=新的MySubSet(); 公共int MySetID { 获取{return mySetID;} 设置{mySetID=value;} } 公共MySubSet MySubSet

我有一个班级
MySet

 class MySet
 {
   .......     
 }
此类将声明对其他类型的引用

(即)

类型
MySubset
的目的是向用户提供“子集id”和整数集合 类型
MySet

以下哪一项是正确的实施

(一)

类MySet
{
int mySetID;
MySubSet subset=新的MySubSet();
公共int MySetID
{
获取{return mySetID;}
设置{mySetID=value;}
}
公共MySubSet MySubSet
{
获取{返回子集;}
集合{subset=value;}
}
}
类MySubSet
{
int subsetID;
列表子集=新列表();
公共列表子集
{
获取{返回子集;}
集合{subset=value;}
}
公共国际海底隧道
{
获取{return subsetID;}
设置{subsetID=value;}
}
}
(二)

类MySet
{
int mySetID;
另一个子集=新的另一个子集();
公共int MySetID
{
获取{return mySetID;}
设置{mySetID=value;}
}
公共另一子集MySubSet
{
获取{返回子集;}
集合{subset=value;}
}
}
类另一子集:列表
{
int subsetID;
List lst=新列表();
公共国际海底隧道
{
获取{return subsetID;}
设置{subsetID=value;}
}
}

如果两者都是最糟糕的设计考虑,请帮助我实现我可以遵循的设计考虑。

MySet
在我看来不像一个集合。这只是一门课

我会把它改名为“MyEntity”或类似的名字

List<MyEntity> mySet = new List<MyEntity>();
List mySet=new List();

MySet
在我看来不像一个收藏。这只是一门课

我会把它改名为“MyEntity”或类似的名字

List<MyEntity> mySet = new List<MyEntity>();
List mySet=new List();

根据您提供的所有信息,我会这样做:

 public class MyEntity
 {
       public int ID { get; set; } //  shortcut
       public List<int> Numbers = new List<int> { get; set; } // shortcut
 }
公共类MyEntity
{
公共int-ID{get;set;}//快捷方式
公共列表编号=新列表{get;set;}//快捷方式
}

很抱歉,我手头没有/Net3.0,因此无法使用快捷方式get/set检查列表的构造函数,但这是重要的理论…

根据您提供的所有信息,我将执行以下操作:

 public class MyEntity
 {
       public int ID { get; set; } //  shortcut
       public List<int> Numbers = new List<int> { get; set; } // shortcut
 }
公共类MyEntity
{
公共int-ID{get;set;}//快捷方式
公共列表编号=新列表{get;set;}//快捷方式
}

很抱歉,我手头没有/Net3.0,因此无法使用快捷方式get/set检查列表的构造函数,但这是重要的理论…

第一个版本更好(由ck改进)-使用组合而不是继承。建议您不要将属性添加到集合中,这实际上就是您在版本2中所做的。集合应仅包含其项。因为我不是专家,其他人可能会详细说明原因,但这确实会导致序列化问题。

第一个版本更好(由ck改进)-使用组合而不是继承。建议您不要将属性添加到集合中,这实际上就是您在版本2中所做的。集合应仅包含其项。其他人可能会详细说明原因,因为我不是专家,但它确实会导致序列化问题。

第2个更好,对该模式使用继承而不是组合,-因为基本上,它是一个集合。它不包含集合。继承为您提供了基类的所有功能,而无需编写传递函数。如果要使用composition将新项添加到集合中,则必须为类MySubSet添加add()方法的传递方法:

class MySubSet    
{        
    int subsetID;        
    List<int> subset = new List<int>();        
    public List<int> SubSet 
    {            
        get { return subset; }             
        set { subset = value; }        
    }        
    public void Add(int i) { subset.Add(i); }  // pass through to subset.Add()
 }
有了继承权,你所需要的就是

MySet.MySubSet.Add(67);

第2个更好,对这个模式使用继承而不是合成,-因为基本上,它是一个集合。它不包含集合。继承为您提供了基类的所有功能,而无需编写传递函数。如果要使用composition将新项添加到集合中,则必须为类MySubSet添加add()方法的传递方法:

class MySubSet    
{        
    int subsetID;        
    List<int> subset = new List<int>();        
    public List<int> SubSet 
    {            
        get { return subset; }             
        set { subset = value; }        
    }        
    public void Add(int i) { subset.Add(i); }  // pass through to subset.Add()
 }
有了继承权,你所需要的就是

MySet.MySubSet.Add(67);

“Ho”的意思与“how”不同:)“Ho”的意思与“how”不同:)子集的ID在哪里?@Natrium-必要时可以轻松添加,但看起来毫无意义,因为它目前是一种1对1的关系,可能是一种快速而肮脏的方法,因为subsetID属于子集而不是MyEntity。子集的ID在哪里?@Natrium-必要时可以轻松添加,但这看起来毫无意义,因为它目前是一种1对1的关系,可能是一种快速而肮脏的方法,因为subsetID属于子集而不是MyEntity