编程语言
首页 > 编程语言> > c#-仅允许从特定的类/实例设置属性

c#-仅允许从特定的类/实例设置属性

作者:互联网

想象一下,我有两个类A和B,其中B具有属性BProperty1和BProperty2.

>属性BProperty1只能由A类设置(无论哪种情况)
>属性BProperty2只能由类A的具体实例设置(对此实例的引用可以例如存储在BProperty1上).

是否有可能实现这样的目标,是否可能有一种模式?请注意,A和B是独立的,它们都不是彼此衍生的!我正在使用C#和WPF.感谢您的提示!

编辑
一个例子:

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

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()
    {

    }
}

解决方法:

您可以锁定设置器,然后将解锁对象所需的对象设为A类私有.

编辑:看完您的编辑后,我建议您将车门作为class car的成员,以了解汽车是如何由x个门组成的.也许是车门的集合.将该成员变量设为私有.这样,轿厢类别之外的任何内容都将无法编辑轿厢门的属性.

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

例…

Class Car
{
    private List<CarDoor> carDoors;

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

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

标签:wpf,c,design-patterns
来源: https://codeday.me/bug/20191210/2098181.html