C#:部分方法和Action,未实现的主体

时间:2010-12-17 00:02:36

标签: c# action partial anonymous-methods

我想从声明类之外调用部分方法。这是不允许的,因为部分方法是隐式私有的。您不能将委托设置为指向部分,因此我建议以下内容:

  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调用,我会遭受性能损失吗?有没有更好的方法来获得相同的功能?

2 个答案:

答案 0 :(得分:3)

Per,MSDN(强调补充):

  

该课程的一部分包含   方法的签名。可选的   实现可以在。中定义   相同的部分或另一部分。 如果   那么没有提供实现   方法和对方法的所有调用   在编译时删除。

因此,没有真正的惩罚,因为呼叫被优化掉了。

答案 1 :(得分:0)

您提出的不同方案之间的性能差异将是亚毫秒级。我会选择最易维护的解决方案,而不是尝试在如此低的水平上优化性能。

所以,我会选择事件解决方案,因为我认为其他.NET开发人员在您更熟悉解决方案而不是您提出的异乎寻常的部分方法方法之后处理代码。