将一个实例添加到引用中,该引用是另一个实例中的字段

本文关键字:引用 实例 字段 另一个 添加 一个 | 更新日期: 2023-09-27 18:20:47

对不起,这个问题可能以不同的形式存在,但我真的到处找都找不到。

我在C++中工作过,习惯了指针。我在用C#模拟代码替换我的逻辑时遇到了问题。

这是我的C#代码:

class Parent
    {
        public Parent A { get; set; }
        public Parent B { get; set; }
    }
    static void Main(string[] args)
    {
        Parent P1 = new Parent();
        Parent X = new Parent();
        Parent[] array = new Parent[10];
        array[0] = P1;
        array[1] = P1.A;
        array[2] = P1.B;   
        array[1]= X;
        //I expect P1.A to be X but it is null
    }

我已经看到C#中有指针,但有更好的方法吗?感谢

编辑:

我的问题不完整。对不起。这是代码:

abstract class Parent
    {
        protected virtual int foo();
    }
    public class Son : Parent
    {
        public Parent A { get; set; }
        public Parent B { get; set; }
        protected override int foo()
        {
             return base.foo();
        }
    }
    public class Daughter : Parent
    {
        public Parent A { get; set; }
        public Parent B { get; set; }
    }
    static void Main(string[] args)
    {
        Son P1 = new Son();
        Parent X = new Daughter();
        Parent[] array = new Parent[10];
        array[0] = P1;
        array[1] = P1.A;
        array[2] = P1.B;   
        array[1]= X;
        //I expect P1.A to be X but it is null
    }

将一个实例添加到引用中,该引用是另一个实例中的字段

您想要做的是:

      array[1].A = X;

它为null,因为它没有初始化。

您必须初始化属性。

class Parent
{
    public Parent A { get; set; }
    public Parent B { get; set; }
    Parent(Parent a, Parent b)
    {
        A = a;
        B = b;
    }
}

Parent X = new Parent();
Parent P1 = new Parent(X, new Parent());