如何使具有类实例的变量对外部类只读,但其模因是读/写的

本文关键字:写的 只读 实例 何使具 变量 对外部 | 更新日期: 2023-09-27 17:57:17

我有这样的代码:

struct Three
{
  public int Number;
}
class One
{
  public Three three;
  public One(){three = new Three();}
}
class Two
{
  private One test = new One();
  public void SomeFunction()
  {
    test.three.Number = 5; // This works fine
  }
}

但是我只需要允许类 One 能够直接写入 three 变量(要做这样的事情 three = new Three()),所以类 2 不能这样做:test.three = new Three(); 但它应该能够做这个测试.three.Number = 5;(就像在该结构的实例中的更改值中一样)所以我这样做了:

struct Three
{
  public int Number;
}
class One
{
  public Three three {private set; get;}
  public One(){three = new Three();}
}
class Two
{
  private One test = new One();
  public void SomeFunction()
  {
    test.three.Number = 5; // This says i can't modify the return value because it is not a variable
  }
}

如何使具有类实例的变量对外部类只读,但其模因是读/写的

public Three three { private set; get; } 是一个属性,Three 是一个Value-Type(又名 Struct),此属性的 get 返回它的副本,而不是对类 One 拥有的实例的实际引用。

所以你要么需要创建一个像test.three = new Three() { Number = 5 };这样的新副本,并将private set更改为public;

或者将Three更改为Class,以便通过引用使用它,并能够通过引用get返回的实例来更改其属性。