C# 实例化具有对象类型本身属性的对象

C# 实例化具有对象类型本身属性的对象,c#,oop,C#,Oop,有没有更好的方法来实例化一个对象,比如说,对象中的属性具有相同的类型。如下面的示例所示,我有一个Employee类,其中包含Employee类型的property Manager class Employee { public string Name { get; set; } public Employee Manager { get; set; } } 如果实例化 Employee n1 = new Employee{ Name="emp1", Man

有没有更好的方法来实例化一个对象,比如说,对象中的属性具有相同的类型。如下面的示例所示,我有一个Employee类,其中包含Employee类型的property Manager

class Employee
{
    public string Name { get; set; }

    public Employee Manager { get; set; }


}
如果实例化

Employee n1 = new Employee{ 
   Name="emp1", 
   Manager = new Employee(){
      Name="mgr1", 
      Manager= new Employee(){ ...

实例化将一直进行到我们现在达到最高级别,以防组织继承权巨大(请假设可能有500个级别),是否有更好的实例化方法

嵌套类是在另一个类的声明中声明的类

您所描述的是嵌套实例,您做得很好

这是一个嵌套类:

class MyOuterClass {
    string outerClassName { get; set; }

    class MyInnerClass {
        string innerClassName { get; set; }
    }

    MyInnerClass myInnerClass = new MyInnerClass() {
        innerClassName = "inner";
    }
}

大多数情况下不需要内部类。

为什么不使用声明性:

class Employee
{
   public string Name { get; set; }
   public Employee Manager { get; set; }

   public static Employee CreateBigBoss(string name) // insert a enterprisey name here
   {
       return new Employee { Name = name, Manager = null };
   }

   public Employee CreateSubordinate(string name)
   {
       return new Employee { Name = name, Manager = this };
   }
}
像这样使用它:

var burns = Employee.CreateBigBoss("Mr Burns");
var smithers = burns.CreateSubordinate("Mr Smithers");

类似这样的问题?

不清楚你在问什么。请添加代码示例。经理不是嵌套的Employee类。你现在想做什么?我正在参考上面的案例抱歉,我猜它不是一个嵌套类。但是,当我尝试实例化一名员工并向首席执行官求助时,我该如何实例化?对不起,我没用那么多。不管怎样,如果我错了,请纠正我。好吧,我想在某一点上不会有更大的管理者(在这种情况下,猜测
Manager=null
——我有点喜欢;))好吧,这就是我的想法,但是如果有一个大的层次结构,代码不会很大,除非你将管理者定义为null;)是的,这更好,我删除了我的答案。是的更好。非常感谢。但这是唯一的办法吗?是否有一些我不知道的语言特性?不,这不是唯一的方法(当然)-有很多方法-我不知道你是否缺少一些语言。这里的特性-这是一个品味和编程风格的问题在现实生活中(以及在原始设计中)你可以同时成为一名经理和一名经理。@nvoigt你现在快乐吗?将IsManager更改为IsCEO后?在现实生活中,我永远不会写这样的东西。整个班级的结构都不好,所以推荐一个更好的结构。还有,
get{}else
到底是什么?这是一个奇怪的结构@埃里克,一切都安排好了。这是打字错误,很抱歉。
//this in main or whetever you use it.
Employee n1 = new Employee();
Employee manager = new Employee();
manager.IsCEO = true;
manager.Name = "Manager Name";

n1.Name = "John";
n1.Manager = manager;


class Employee
{
    private Employee _manager = new Employee();

    public string Name { get; set; }

    public bool IsCEO{ get; set;}

    public Employee Manager 
    { 
       get
       {
            if(IsCEO)
               return null;
            else
               return _manager;
       } 
       set
       {
            if(!IsCEO)
               _manager=value;
       }
    }   

}