Как связать два свойства двух классов вместе

#c# #properties #bind

#c# #свойства #привязать

Вопрос:

Как определить зеркальное свойство для разделения класса с равным значением? У меня есть такой класс:

 public abstract class Car
{
    public Point3D Location { get; set; }
}
 

И еще один класс, подобный этому:

 class Motion
{
    public Point3D Location {get; set;}
    public Motion(Point3D location)
    {
        Location  = location;
    }
}
 

Я хочу двигаться.Местоположение будет обновляться при изменении Car.Location. Это делается до тех пор, пока Car.Location не будет обновлен.

     car1.Location=new Point3D();
 

После этого эти два свойства разделились.
Итак, что я могу сделать, чтобы гарантировать движение.Значение местоположения совпадает со значением Car.Location.

Комментарии:

1. Невозможно, вы не можете создать экземпляр Car для начала. Это абстрактный класс. Похоже, вам нужны два статических класса, если у вас более одного Motion объекта или Car объектов, как вы узнаете, какой Motion объект обновлять при изменении какого-либо конкретного Car.Location объекта?

2. @tnw Нигде в вопросе я не вижу, чтобы OP пытался создать экземпляр Car . (т.е. Car car1=new Honda(); car1 . Location = new Point3D(); /* является допустимым кодом */)

3. Это не имеет значения. Предположим, что car1 является экземпляром производного класса Car, предположим, что Car не является абстрактным.

4. @Nasser Ах да, это то разъяснение, в котором я нуждался, неясно, есть ли производный класс, с которым мы здесь работаем, а не Car он сам.

Ответ №1:

Все, что вы действительно можете сделать, это объявить событие на уровне объекта, чтобы получать уведомления при изменении свойства. Но вам нужно будет добавить внутреннее свойство Location , чтобы вы могли запускать событие.

 public abstract class Car
{
   private Point3D _loc;
   public event System.EventHandler LocationChanged;
   public Point3D Location 
   { 
      get{
          return _loc;
      }
     set; {
       _loc = value;
       if ( LocationChanged != null )
       {
          LocationChanged( this, new EventArgs() );
       }
     }
   }
 }
 

Ответ №2:

Классы не имеют значений. Экземпляры классов имеют значения. Здесь вы не создаете экземпляры Car или Motion, поэтому привязывать действительно нечего. Если бы у вас были экземпляры, вы могли бы попросить установщика car.location обновить значение местоположения экземпляра motion (хотя из вашего кода неясно, откуда будет взят этот экземпляр)