Рассмотрим следующий код:
public struct Vector2
{
public float X;
public float Y;
}
public class Sprite
{
private Vector2 position;
public ref Vector2 Position => ref position;
private void DoStuffWhenPositionChanges() { /*...code...*/ }
}
ref return
позволяет мне выполнять следующие операции над множествами:
someSprite.Position.X++;
someSprite.Position.Y = 42;
Я хотел бы вызывать DoStuffWhenPositionChanges
всякий раз, когда либоX
или Y
компоненты структуры Position
установлены.Обратите внимание, Vector2
является структурой уровня библиотеки, и ее нельзя изменить в моем коде.
Я ищу решение, похожее на:
public class Sprite
{
private Vector2 position;
public Vector2 Position
{
get => position; //ref return not possible!
set
{
position = value;
DoStuffWhenPositionChanges();
}
}
private void DoStuffWhenPositionChanges() { /*...code...*/ }
}
... но сref return
, чтобы избежать необходимости делать следующее в вызывающем коде:
someSprite.Position = new Vector2(someSprite.Position.X, someSprite.Position.Y + 1);
Я рассмотрел INotifyPropertyChanged
, но так как я не могу изменить структуру Vector2
уровня библиотеки, мне нужноальтернативное решение.Я также рассмотрел тип прокси, неявно преобразуемый в Vector2, который будет реализовывать INotifyPropertyChanged
, но это кажется ... громоздким;возможно, есть более чистое решение, о котором я не знаю.
Можно ли узнать, когда изменится базовое значение свойства ref return
, учитывая настройки выше?