Я хочу вызвать частичный метод извне объявленного класса. Это недопустимо, поскольку частичные методы неявно являются закрытыми. Вы не можете установить делегата для указания на частичное, поэтому я предлагаю следующее:
public partial class MyClass {
AnotherClass _anotherClass;
public MyClass () {
_anotherClass = new AnotherClass();
_anotherClass.Method = new Action(() => {
this.Method();
});
}
partial void Method();
//sometimes this method will be implemented
//partial void Method() {
//do something
//}
}
public class AnotherClass {
public Action Method { get; set;}
public void SomeOtherMethod(){
this.Method();
}
}
Классы тесно связаны, они находятся в родительских и дочерних отношениях. Я хочу, чтобы у родителя был метод, который он может переопределить, чтобы знать об изменениях свойств дочернего элемента. Я мог бы прикрепить обработчики событий к каждому дочернему элементу, однако ребенок уже знает о своем родителе, так что прямое информирование родительского элемента о ребенке похоже на путь. За исключением случаев, когда родителю все равно , поэтому я хочу иметь возможность реализовать частичное, если мне все равно. Этот вопрос в основном о простоте программирования против производительности. Я знаю, что мог бы прикрепить обработчики событий только к ситуации, в которой я забочусь, но с реализацией, как описано выше, я могу генерировать все частичные методы и реализовывать партиалы, только если я забочусь
Мой вопрос касается случаев, когда частичный метод Method()
не реализован. Когда вызывается метод Action, компилятор оптимизирует его, так как его тело пусто? Если я получу кучу сделанных вызовов Action, могу ли я потерять производительность? Есть ли лучший способ получить такую же функциональность?