向作为另一个对象的引用的数组元素添加值

本文关键字:引用 数组元素 添加 一个对象 | 更新日期: 2023-09-27 18:20:48

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

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

这是我的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
}

我希望数组是未来实例的某种持有者,这些实例将直接添加到对象字段中。

向作为另一个对象的引用的数组元素添加值

您从未为P1.a赋值,因此它仍然为null。实际上,您将值分配给数组[1]两次:第一次分配P1.A,第二次分配给X。两个引用的值之间没有关系。

您可以认为C#引用(如数组[1]或对象obj=new object())类似于C++指针。

在您的示例中,请替换。使用->,并尝试思考它在c++中的工作方式:它在c#中的工作原理相同

[编辑]

在c++中,你会写:

Son* P1 = new Son();
Parent* X = new Parent();
Parent* array[10]; // an array of 10 pointers
//TODO: zeromemory all elements of array, c++ does't iniziatialize pointers
array[1] = P1->A;
array[1] = X;

在c#中,您可以这样写上面的代码:

Son P1 = new Son();
Parent X = new Parent();
Parent array[10]; // an array of 10 reference to Parent, c# initialize all references to null
array[1] = P1.A;
array[1] = X;