C# 定义具有相同类的字段的类。带自引用的类?

C# 定义具有相同类的字段的类。带自引用的类?,c#,class,self-reference,C#,Class,Self Reference,您可以定义一个具有属于该类的成员字段的类,这似乎很奇怪 public class Person { public string Name { get; set; } public Person Spouse { get; set; } } 现在,如果我称之为类: var jane = new Person(); var jim = new Person(); jane.Spouse = jim; jim.Spouse.Spouse = jane; 最后一行导致错误。但是我有点

您可以定义一个具有属于该类的成员字段的类,这似乎很奇怪

public class Person
{
    public string Name { get; set; }
    public Person Spouse { get; set; }
}
现在,如果我称之为类:

var jane = new Person();
var jim = new Person();
jane.Spouse = jim;
jim.Spouse.Spouse = jane;
最后一行导致错误。但是我有点难以想象jim.party.party电话在做什么。它应该首先计算jim.party,它是空的,所以它会导致错误,对吗?如果我先断言jim.party=jane,那么它应该有效吗?但我的意思是简。配偶=简


如果一个类有一个相同类型的字段,那么它对该类做了什么?它只是允许类的两个实例具有关系吗?类引用自身,所以它从自身继承?我有点困惑,还想知道这是否是一种糟糕的做法

您在这里问了好几件事,但一般来说,在对象上引用同一类型(甚至同一实例)是可以的

public class Thing {
    private string name;

    public Thing(string name) {
        this.name = name;
    }
    public Thing Other {
        get;
        set;
    }

    public override string ToString() {
        return this.name;
    }
}

var o = new Thing("Foo");
o.Other = o;
Debug.WriteLine(o.Other.Other.Other.Other.ToString()); // Could go on forever
  • 您关于异常的断言是正确的。它抛出,因为
    jim.party
    是一个空引用,所以您不能对其设置属性
  • 如果设置
    jim.party=jane,则您应该能够设置引用。在这种情况下,您需要说
    jim.party.party=jim,因为
    jim.party
    的计算结果为
    jane
  • 对于相同类型的字段,它与其他字段没有什么不同。它只是一个具有类使用的类型的变量。一个类型引用同一类型的其他对象并不是一种罕见的模式。例如,Employee类可能有一个对经理的引用,经理也是雇员。另一个常见的示例是树实现,在二叉树中,节点将引用左/右子节点

  • 您在这里问了好几件事,但一般来说,在对象上引用同一类型(甚至同一实例)是可以的

    public class Thing {
        private string name;
    
        public Thing(string name) {
            this.name = name;
        }
        public Thing Other {
            get;
            set;
        }
    
        public override string ToString() {
            return this.name;
        }
    }
    
    var o = new Thing("Foo");
    o.Other = o;
    Debug.WriteLine(o.Other.Other.Other.Other.ToString()); // Could go on forever
    
  • 您关于异常的断言是正确的。它抛出,因为
    jim.party
    是一个空引用,所以您不能对其设置属性
  • 如果设置
    jim.party=jane,则您应该能够设置引用。在这种情况下,您需要说
    jim.party.party=jim,因为
    jim.party
    的计算结果为
    jane
  • 对于相同类型的字段,它与其他字段没有什么不同。它只是一个具有类使用的类型的变量。一个类型引用同一类型的其他对象并不是一种罕见的模式。例如,Employee类可能有一个对经理的引用,经理也是雇员。另一个常见的示例是树实现,在二叉树中,节点将引用左/右子节点

  • 如果答案有效,您应该单击复选标记以指示该选项。由于您还没有这样做,请采取行动,看看如何这样做的一些细节。被接受和被提升的答案有助于其他人找到好答案如果答案有效,您应该单击复选标记以表明这一点。由于您还没有这样做,请采取行动,看看如何这样做的一些细节。被接受和被提升的答案有助于其他人找到好的答案