Custom C#对象是否可以包含与其自身类型相同的属性?

tri*_*nes 10 c# properties object

如果我创建了以下Employee对象(简化)...

 public class Employee
    {
        public Employee()
        {       
        }

        public String StaffID { get; set; }
        public String Forename { get; set; }
        public String Surname { get; set; }
    }
Run Code Online (Sandbox Code Playgroud)

...在Employee对象中有另一个属性是否可以接受,而Type也是Employee来保存其经理的详细信息(如下所示)?

 public class Employee
    {
        public Employee()
        {       
        }

        public String StaffID { get; set; }
        public String Forename { get; set; }
        public String Surname { get; set; }

        public Employee Manager { get; set; }
    }
Run Code Online (Sandbox Code Playgroud)

另外,为Manager属性实例化Employee对象的最佳方法是什么?显然包含在构造函数中会导致无限循环.从Employee继承的Manager类是最好的方法(即使所有属性都相同)吗?this.Manager = new Employee();

Ode*_*ded 19

一个对象可能确实有它自己的类型的对象的引用.

这是大多数Node类型对象的实现方式.

至于实例化 - 您可以传入Employee对象以用作管理器(对于没有管理器传递null).构造函数可以有多个重载:

public Employee(Employee manager)
{
   this.Manager = manager;
}
Run Code Online (Sandbox Code Playgroud)

  • @ Dr.AndrewBurnett-Thompson - 你似乎错过了维基的重点,就像SO的属性一样.就目前而言,无论如何我都在添加它,而不是寻找其他答案 - 尽管如此.编辑应该会让答案变得更好 - 假设我确实提出了另一个答案,这怎么会让它变坏?你贬低了答案,因为它变得更好了? (2认同)

Den*_*aub 6

是的,对象可以包含对同一类的其他对象的引用.

其次,我不会在cunstructor中创建一个新的Employee,而是像这样注入它:

public class Employee
{
    public Employee(Employee manager)
    {
        this.Manager = manager;
    }

    public String StaffID { get; set; }
    public String Forename { get; set; }
    public String Surname { get; set; }

    public Employee Manager { get; set; }
}
Run Code Online (Sandbox Code Playgroud)


Mar*_*ell 5

唯一不可能的情况使用struct; astruct直接包含的(而不是对数据的固定大小引用),因此结构的大小Employee必须是“其他字段的大小加上 Employee 的大小”,这是循环的。

特别是你不能:

struct Foo {
    Foo foo;
}
Run Code Online (Sandbox Code Playgroud)

(或任何其他会导致循环大小的内容) - 编译器响应:

“Foo”类型的结构成员“Foo.foo”导致结构布局中出现循环

然而,在所有其他情况下都没有问题;对于初始化问题,我会说:最初将其保留为未分配状态,然后让调用者通过属性分配值。