如何在C#中使用部分方法来扩展现有的实现

时间:2015-09-22 07:34:29

标签: c# oop partial-classes partial-methods

如果这样做会很棒。我试图以错误的方式实现我的想法吗?

我想使用partial方法,以便能够扩展现有代码,并简单地插入/输出方法的实现。

基本上恰恰是reference所说的:

  

部分方法使类设计者能够提供方法钩子,   类似于事件处理程序,开发人员可能决定实现或   不。如果开发人员没有提供实现,那么编译器   在编译时删除签名。

我首次尝试使用此功能如下:

DefinitionsBase.cs:

namespace ABC {
    public partial class Definitions {
        // No implementation
        static partial void TestImplementaion();
    }
}

DefinitionsExt.cs:

namespace ABC {
    public partial class Definitions {
        static partial void TestImplementaion(){
            // Implementation is here
        }
    }
}

的Program.cs:

namespace ABC {
    class Program {
        static void Main(string[] args) {
            Definitions.TestImplementaion();
        }
    }
}

它是相同的命名空间,但作为参考状态部分方法是隐式私有的。它不接受访问修饰符,我不能从我的类中调用它。有没有办法按我的意图使用它?

谢谢!

1 个答案:

答案 0 :(得分:3)

您可以使用调用私有方法的公共方法,但我不确定这是否是您想要的。这只会使你的代码工作。

部分方法根据定义是私有的,因此在编译期间,如果未实现该方法,编译器不需要遍历所有代码,找到对该方法的所有可能引用,并将其删除。 这是一种设计选择,因为部分方法不一定需要实现,编译器只查看部分类实现而不是所有代码。 如果实现了一个调用partial方法并且未实现partial方法的公共方法,编译器仍然只会查看部分类文件和代码,即使您可以从代码中的任何位置访问该部分方法。