C#部分类与部分方法
Posted 性能、可用性、伸缩性、扩展性、安全性、可监控是网站架构最核心
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C#部分类与部分方法相关的知识,希望对你有一定的参考价值。
public partial class MyClass { partial void MyPartialMethod(); } public partial class MyClass { partial void MyPartialMethod() { // Method implementation } }
部分方法也可以是静态的,但它们总是私有的,且不能有返回值。它们使用的任何参数都不能是out参数,但可以是ref参数。部分方法还不能使用virtual、abstract、override、new、sealed和extern修饰符。
有了这些限制,就不太容易看出部分方法的作用了。实际上,部分方法在编译代码时非常重要,其用法倒并不重要。考虑下面的代码:
public partial class MyClass { partial void DoSomethingElse(); public void DoSomething() { Console.WriteLine(“DoSomething() execution started.”); DoSomethingElse(); Console.WriteLine(“DoSomething() execution finished.”); } } public partial class MyClass { partial void DoSomethingElse() { Console.WriteLine(“DoSomethingElse() called.”); } }
这段代码定义了部分方法DoSomethingElse,在第一个部分类中定义,在第二个部分类中执行。在控制台应用程序中调用DoSomething时,输出如下所示:
DoSomething() execution started.
DoSomethingElse() called.
DoSomething() execution finished.
如果删除第二个部分类定义,或者删除部分方法的全部执行代码(注释掉代码),输出就如下所示:
DoSomething() execution started.
DoSomething() execution finished.
读
者可能认为,调用DoSomethingElse时,运行库发现该方法没有执行代码,因此会继续执行下一行代码。但实际上,编译代码时,如果代码包含一个
没有执行代码的部分方法,编译器会完全删除该方法,还会删除对该方法的所有调用。执行代码时,不会检查执行代码,因为没有检查方法的调用。这会略微提高性
能。
与部分类一样,在定制自动生成的代码或设计器创建的代码时,部分方法是很有用的。设计器会声明部分方法,用户根据具体情形选择是否执行它。如果不执行它,就不会影响性能,因为该方法在编译过的代码中不存在。
现在考虑为什么部分方法不能有返回类型。如果可以回答这个问题,就可以确保完全理解了这个主题,我们将此留作练习。
以上是关于C#部分类与部分方法的主要内容,如果未能解决你的问题,请参考以下文章
部分类静态类Object类ToString()方法扩展方法的使用
(13)C#传智:访问修饰符,简单工厂模式,序列化与反序列化,部分类,密封类,接口(第13天)
如何在 EntityFramework Core 中使用部分类和部分 OnModelCreating 方法扩展 DbContext