2015-04-04 5 views
1

У меня такой код в User Control. Идея заключается в том, что она работает как обычная переменная, но когда она установлена, она заставит элемент управления перерисовать.Код котла с переменной с пользовательским {get; задавать; }

private int _imageHeight; 

public int ImageHeight 
{ 
    get { return _imageHeight; } 
    set 
    { 
     _imageHeight = value; 
     Invalidate(); 
    } 
} 

Я понимаю { get; set; } дает мне весь код, я просто написал, кроме Invalidate() части. Есть ли какой-то способ, которым мне не нужно писать код объявления declare и getter/setter, но все же получить часть Invalidate()?

+0

Почему бы не вызвать 'invalidate' в том же члене, где сделан вызов setter? –

+1

Цель состоит в том, чтобы ИЗМЕНИТЬ шаблонный код, а не делать больше из них. – Zuoanqh

+0

Что делает метод 'invalidate'? Возможно, вы можете использовать отражение для недействительности без записи набора get. –

ответ

2

Концепция, которую вы ищете, называется аспектно-ориентированным программированием. С аспектно-ориентированным программированием вы можете избавиться от Boilerplate и объявить аспект (как атрибут), который делает Invalidate после вызова сеттера. (Может быть сделано и на уровне класса).

https://www.postsharp.net/ действительно позволяет АОП в C# Я попытался это сделать один раз, к сожалению, остальная часть нашей команды не считает, что этот тип шаблона является проблемой. Поэтому я снова бросил его, но он может делать именно то, что вы хотите.