2011-01-19 65 views
5

我正在寻找一些类结构的帮助。假设我有一个名为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); 
     } 
    } 
} 
+3

当你说“可能有多只狗”时,你的意思是'多种类的狗'或'多种类型的狗'吗? – yasouser 2011-01-19 15:17:56

+0

对不起,狗狗的多个实例 – Spooks 2011-01-19 15:23:56

回答

5

,使狗的名单最简单的方法是:

List<Dog>

这是使用来自System.Collections.Generic的List<T>类犬的强类型列表。你可以做一个类的这样的:

public class DogList : List<Dog>

虽然,除非你想特别添加属性到列表狗而不是狗本身这通常是没有必要的。

UPDATE:

您通常不需要使用List<T>时创建一个专用的列表类。如果您使用LINQ,让您的数据

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' 
    } 
} 

,您可以使用ToList()扩展到返回List<T>,所以没有必要创建一个从派生的类:在大多数情况下,你可以这样做List<T>

+0

我知道如何制作狗的列表,我只是不知道在哪里制作它,以便它可以在任何课程中使用。我需要一种方法来设置列表,如果它在自己的类或狗类中 – Spooks 2011-01-19 15:26:09

+1

通用列表很方便,因为您不需要在整个地方声明它们。在我的项目中,当我需要一些东西(发票,用户,无论)的列表时,我公开了一个列表的属性或方法,其中T是我想要返回的类型。如果您有返回狗列表的服务,请使方法返回列表。如果您的ViewModel支持带有列表框或网格的视图,请创建属性或键入列表并将该控件绑定到该属性。 – 2011-01-19 15:30:47

3

那么,C#已经有一个非常好的List<>类,所以除非你有非常特殊的需求,否则我不会用新的DogList类。如果您需要跟踪所有创建的狗,那么狗类中的静态列表就没有问题。只要确保它保持private,并且您有添加或检索狗的方法。更好的是,你的狗工厂可以将它们添加到你的列表(我现在看到你自己提到)。

1

或者该列表应该是一个静态的 原狗类吗?也许在 的构造函数中,任何时候有人创建一个新的狗 ,这个狗就会被放入到 的静态列表中?

该解决方案可以在单线程应用程序中工作,但它会使您暴露于all the dangers of global variables

这也将是一个贫穷的抽象*:它的时候才有意义的Dog类包含任何主叫方已在运行时构建了所有的狗的名单?如果调用者取消分配Dog实例,会发生什么情况?

相反,使用狗列表的调用者应该明确地负责创建和管理它。这些调用者将知道列表的正确生命周期,他们将能够控制列表中的内容,并且任何阅读代码的人都会明白发生了什么以及如何发生。

*除非该列表应该是创建狗的日志。