向作为另一个对象的引用的数组元素添加值
本文关键字:引用 数组元素 添加 一个对象 | 更新日期: 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;