#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 (хотя из вашего кода неясно, откуда будет взят этот экземпляр)