在类定义中使用类的同一对象

时间:2012-03-06 17:19:15

标签: c#

我有一个我正在努力解决的问题。我正在设计一个课程,但我对oop不太熟悉。是否可以定义与类本身类型相同类型的列表?比如说我有一个狗类:

public class Dog
{
    public string _name {get; set;};

    public Dog (string, name)
    {
        _name = name;
    }

    public List<Dog> listOfDogs ()
    {
        // blah blah
    }
}

这种结构有可能吗?如果是这样,怎么样?这是做这样的事情的正确方法吗?或者我应该创建另一个帮助类,通过创建单独的狗对象来简单地构建狗列表?

由于

4 个答案:

答案 0 :(得分:0)

  

是否可以定义与类本身类型相同类型的列表?
  这样的结构可能吗?

是的,这完全合法。问题是在申请的背景下是否有意义。

  如果是这样,怎么样?这是做这样的事情的正确方法吗?

你做的方式很好,虽然通常它会被声明为属性而不是方法。

  

或者我应该创建另一个帮助类,通过创建单独的狗对象来简单地构建狗列表?

这取决于你想做什么......很难确切地说出你的目标是什么。

答案 1 :(得分:0)

简短回答:是的,确实如此。

在许多情况下这是有道理的。在{OOP'世界中,Dog可以与其他狗相关联。

此外,我还建议你做一些其他微小的改进:

public class Dog
{
  public string Name { get; set; } // PascalCase is a convention here

  public Dog(string name)
  {
    Name = name;
  }

  public IList<Dog> listOfDogs () // try to expose interfaces whenever possible
  {
    // blah blah
  }
}

如果你是OOP的新手,特别是界面的东西值得大量阅读。有一些不同的列表实现,OOP可以帮助您隐藏这些所谓的“实现细节”。稍后,您可以使用Dog[]代替List<Dog>,而无需更改班级的消费者。两者都实现IList<Dog>

这些东西在很多地方都有详细描述。 SO上有书籍,文章或这个问题:What do programmers mean when they say, "Code against an interface, not an object."?

答案 2 :(得分:0)

这样做:

public class Dogs : List<Dog> {
   // your additional methods/properties/etc go here
   // every object of this list will be of the type "Dog"
   // and you cannot add any type other than the type "Dog" to this list
}

希望有所帮助

修改 我希望我能正确理解你的问题......

您可能还想将“Dog”类的定义更改为:

public class Dog {
    public Dog(string name) {
        this.Name = name;
    }

    public string Name { get; set; }
}

答案 3 :(得分:0)

是的,一个班级引用自己并拥有自己的成员是完全合法的。

然而,这可能不是您想要解决此特定问题的设计。对于狗来说,列出其他狗只是不合逻辑的(在我看来)。