gpt4 book ai didi

c# - 只允许设置来自特定类/实例的属性

转载 作者:行者123 更新时间:2023-11-30 16:33:31 25 4
gpt4 key购买 nike

假设我有两个类 A 和 B,其中 B 具有属性 BProperty1 和 BProperty2。

  • 属性 BProperty1 只能由类 A 设置(无论是哪个实例)
  • 属性 BProperty2 只能由类 A 的具体实例设置(对该实例的引用可以例如存储在 BProperty1 上)。

是否有可能实现类似的东西,是否有一个模式?请注意,A 和 B 是独立的,没有一个派生自另一个!我正在使用 C# 和 WPF。感谢您的任何提示!

编辑一个例子:

想象一个类 Car 和一个类 CarDoor。每当将 CarDoor 添加到 Car 时,CarDoors 属性 AssociatedCar 将设置为其分配给的 Car,因为稍后需要此引用。但是如何确保 AssociatedCar 属性不是由用户设置的,而是由 Car 类在调用 AddCarDoor(door) 时设置的?

class Car
{
private List<CarDoor> _carDoors = new List<CarDoor>();

public Car()
{

}

public void AddCarDoor(CarDoor door)
{
// Add the door to the car
_carDoors.Add(door);

// Save a reference to the car assigned to the door
door.AssociatedCar = this;
}
}


class CarDoor
{
public Car AssociatedCar;

public CarDoor()
{

}
}

最佳答案

您可以锁定 setter,然后将解锁它所需的对象设为 A 类私有(private)。

编辑:看到您的编辑后,我建议您将车门设为汽车类的成员,看看汽车是如何由一些 x 门组成的。或者可能是车门的集合。将该成员变量设为私有(private)。然后,汽车类之外的任何人都无法编辑汽车门的该属性。

Edit2:此外,在汽车和车门之间建立双向关联(即,车门有关联的汽车,汽车有关联的车门)有点多余。我不明白您为什么需要它 - 只需为车门设置一个 public get 属性,这样您就可以在汽车类之外使用该数据。

例子...

Class Car
{
private List<CarDoor> carDoors;

Car()
{
this.carDoors = new List<CarDoor>();
}

public List<CarDoor> getCarDoors
{
return this.carDoors;
}
}

关于c# - 只允许设置来自特定类/实例的属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3112948/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com