C#:部分方法和行动,非执行机构
我想从声明类的外部调用分部方法。这是不允许的,因为分部方法是隐式私有的。您不能将委托设置为指向分部,因此我建议如下:C#:部分方法和行动,非执行机构,c#,action,partial,anonymous-methods,C#,Action,Partial,Anonymous Methods,我想从声明类的外部调用分部方法。这是不允许的,因为分部方法是隐式私有的。您不能将委托设置为指向分部,因此我建议如下: public partial class MyClass { AnotherClass _anotherClass; public MyClass () { _anotherClass = new AnotherClass(); _anotherClass.Method = new Action(() =&g
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方法时,编译器是否会在其主体为空时对其进行优化?如果我收到一堆这样的动作调用,我会受到性能惩罚吗?有没有更好的方法来获得相同的功能?Per,(强调添加):
类的一部分包含
方法的签名。可选的
可在中定义实现
同一部分或另一部分如果
那么,没有提供实现
方法以及对该方法的所有调用
在编译时被删除。
因此,当调用被优化掉时,没有真正的损失。您提出的不同场景之间的性能差异将是亚毫秒。我会选择最具可维护性的解决方案,而不是尝试在如此低的级别上优化性能
因此,我会选择事件解决方案,因为我认为在您之后处理代码的其他.NET开发人员会更熟悉该解决方案,而不是您介绍的奇特的部分方法。您不会得到明显的性能影响,调用空操作是一种非常廉价的操作。我怀疑编译器是否会删除无效操作。我不明白为什么人们谈论性能。如果有关系的话。。。测量它;)是的,但是分部方法调用在将被调用的操作中(它只是没有主体),因此必须涉及一些处理。
操作
是无效方法。处理相当于调用一个没有主体的方法。我知道JIT忽略了对空方法的调用,但即使它没有对“操作”这样做,调用也不会以任何可测量的方式影响性能。