将一个实例添加到引用中,该引用是另一个实例中的字段
本文关键字:引用 实例 字段 另一个 添加 一个 | 更新日期: 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());