Faire du développement à base de composants, je me retrouve à faire ce assez souvent:Quelle est la façon la plus élégante d'échanger les événements lors de la création d'une propriété?
public class SomeClass
{
SomeOtherClass foo;
public SomeOtherClass Foo
{
get { return foo; }
set {
if (value != foo) {
if (value != null) {
// subscribe to some events
value.SomeEvent += foo_SomeEvent;
}
if (foo != null) {
// unsubscribe from subscribed events
foo.SomeEvent -= foo_SomeEvent;
}
foo = value;
}
}
}
void foo_SomeEvent(object sender, EventArgs e)
{
// do stuff
}
}
est-il un moyen plus élégant de faire cet événement « transfert de sortie »?
(Bien sûr, la question pourrait être évitée si foo
était immuable, mais je ne voudrais pas obtenir un soutien de concepteur visuel.)
Parfois, je me retrouve dupliquer ce code plusieurs fois dans une classe, et il commence semblant comme beaucoup d'ennuis pour une opération simple. Eh bien ... –
Ouais, c'est le genre de cas où les macros C++ me manquent ... –
Edité pour vous montrer une version plus courte en utilisant lambdas –