在类定义中使用类的同一对象
本文关键字:对象 定义 | 更新日期: 2023-09-27 18:26:50
我有一个c#问题,我很难回答。我正在设计一个类,但我对oop不太熟悉。是否可以定义一个与类本身的类型相同类型的列表?例如说我有一个狗类:
public class Dog
{
public string _name {get; set;};
public Dog (string, name)
{
_name = name;
}
public List<Dog> listOfDogs ()
{
// blah blah
}
}
这样的结构可能吗?如果是,怎么做?这样做正确吗?或者我应该创建另一个助手类,通过创建单独的dog对象来简单地构建dog列表?
感谢
简短回答:是的。
这在很多情况下都是有道理的。Dog
可能与OOP世界中的其他狗相关联。
此外,让我只建议你其他一些小的改进:
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上有书、文章或这个问题:程序员说";针对接口而非对象的代码"?
是否可以定义一个与类本身的类型相同类型的列表
这样的结构可能吗?
是的,这是完全合法的。问题是它在应用程序的上下文中是否有意义。
如果是,怎么做?这样做正确吗?
虽然通常会将其声明为属性而不是方法,但执行此操作的方式很好。
或者我应该创建另一个助手类,通过创建单独的dog对象来简单地构建dog列表?
这取决于你想做什么…很难说你的目标到底是什么。
这样做:
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; }
}
是的,类引用自身并将自身实例作为成员是完全合法的。
尽管如此,这可能不是你想要的针对这个特定问题的设计。(在我看来)一只狗列出其他狗的名单是不合乎逻辑的。