我正在寻找一些类结构帮助。让我们说我有一个名为Dog的班级有关于狗的信息(名称,体重,类型),但因为可能有多只狗,我还想要一个班级来容纳所有这些狗,以便在整个项目中使用。这是最好的方法吗?
只是要有一个DogList类,它将Dog类信息存储到公共列表中?允许我随意取回它?
或者列表应该是原始狗类中的静态?也许在构造函数中,只要有人创建了一条新狗,狗就会进入静态列表?
编辑:对不起问题有点错过领先 这是我到目前为止的结构,想知道是否有更好的实施方法。public class Dog
{
public string name{get;set;}
public int weight { get; set; }
}
public class DogFactory //not sure if thats the correct wording
{
public List<dog> lstDogs = new List<dog>();
public void setDogs()
{
Animal.Retrieve("Dog");
//will retrieve a list of all dogs, with details, though this is costly to use
foreach(Animal.Dog pet in Animal._Dogs)
{
Dog doggie = new doggie();
doggie.Name = pet.Name;
...etc
lstDog.add(doggie);
}
}
}
答案 0 :(得分:5)
制作狗列表的最简单方法是:
List<Dog>
这是使用System.Collections.Generic中的List<T>
类的强类型狗列表。你可以上课:
public class DogList : List<Dog>
虽然通常不需要这样做,除非您想要特别添加狗的列表属性,而不是狗本身。
更新:
使用List<T>
时,通常不需要创建专用列表类。在大多数情况下,您可以这样做:
public class DogService
{
public List<Dog> GetAllDogs()
{
var r = new Repository(); // Your data repository
return r.Dogs.ToList(); // assuming your repository exposes a 'Dogs query'
}
}
如果您使用LINQ来获取数据,则可以使用ToList()扩展名返回List<T>
,因此无需创建派生自List<T>
的类。
答案 1 :(得分:3)
嗯,C#已经有了一个非常好的List<>
类,所以除非你有非常具体的需求,否则我不会选择新的DogList类。如果你需要跟踪所有创建的Dogs,那么dog类中的静态列表就可以了。只要确保它保持private
并且你有添加或检索狗的方法。更好的是,您的狗工厂可以将它们添加到列表中(我现在看到您自己提到)。
答案 2 :(得分:1)
或者列表应该是静态的 原来的狗类?也许在 构造函数,任何人创建 一只新的狗,狗被放入了 静态列表?
此解决方案适用于单线程应用程序,但它会让您接触all the dangers of global variables。
这也是一个糟糕的抽象 * :什么时候Dog
类包含任何调用者在运行时构建的所有狗的列表是否有意义?如果调用者取消分配Dog
实例会发生什么?
相反,使用狗列表的呼叫者应明确承担创建和管理它的责任。那些呼叫者将知道列表的正确生命周期,他们将能够控制列表中的内容,此外,任何阅读代码的人都会明白发生了什么以及如何发生。
* 除非该列表应该是创建的狗的日志。