为什么我们需要.NET中的分部类
本文关键字:NET 我们 为什么 | 更新日期: 2023-09-27 18:01:15
在.Net中编译应用程序时,它会将所有分部类分组,并将它们视为单个对象。
public partial class DemoClass
{
public void Hello()
{
}
}
public partial class DemoClass
{
public void Bye()
{
}
}
在代码后面的部分类总是有
public partial class Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
}
}
那为什么我们在.NET中有分部类呢?
分部类提供了一种在文件中分割类代码的方法。
这样,一个文件可以包含生成的代码,而另一个文件则可以包含手写代码。生成的代码可以在不干扰手写代码的情况下重新生成。如果自定义代码被添加到与生成代码相同的文件中,则重新生成会覆盖它
VisualStudio本身在设计人员生成代码和用户添加逻辑的许多地方都使用了这种方法。有时Visual studio只在编译过程中生成生成的代码来隐藏生成的代码(编译WPF应用程序会在Xaml和"代码隐藏"之间生成一个"桥接"类(,有时生成的代码会放在分部类中,而不提供留给开发人员的空双子类。
一般来说:当生成代码时,使用分部类作为使用生成器的开发人员的服务。当我们在做这件事的时候:考虑提供分部方法,让开发人员能够钩住生成代码的逻辑,这样开发人员就可以在实现分部方法和基于正确原因对生成的类进行子类之间自由选择。
Partial用于跨多个文件拆分代码。有3个理由拥有分部类:
- 为了在创建设计器时进行必要的分离,应该避免用户和设计器代码的混合。例如:Windows窗体类
- 然而,对于拆分大型类,无论如何都应该避免这种情况
- 对于嵌套类型(这是我个人经常做的事情(
Partial在生成代码时使用,代码很容易更改,但它的真正来源是例如.edmx文件。因此,每次更改.edmx文件时,都会重新生成代码。这意味着您在该文件中所做的每一次更改都会丢失。现在,如果你想扩展代码,你会怎么做?从要扩展的类继承,或者使用分部。记住,当你继承了更多的东西。当您使用分部时,它只是同一个类的一部分。
此外,有时您不能继承,因为基类是密封的,而且您还可能遇到写得不好的反射代码的问题。
程序员使用这些分部类的方式有很多,例如:
- 将一个类划分为许多较小的文件(如果文件太大,并且鼠标滚动不好(
- 允许基类的扩展
- 一些机器生成的代码被标记为部分代码,这样您就可以添加自己的逻辑,而不会看到生成的代码
- 等等
我认为所有这些原因都不好。我尽量避免偏类。事实上,我用sealed
标记了我的大部分课程。我相信,如果我们不使用分部类
有时在不同的库中,您可以看到标准业务逻辑的实现,但可以使用分部类进行扩展。
例如,在EntityFramework中,您可以使用数据库优先的方法生成数据库模型,然后您将拥有模型类-分部类。他们使用分部类将生成的代码与您自己的扩展代码分离。
这是一篇关于它为什么出现在C#和asp.net中的信息文章http://www.codeproject.com/Articles/313352/real-time-use-of-Partial-classes-and-partial-met
当某些类是用t4模板生成的,如Models with EntityFramework和.edmx.时,分部类很有用
因此,您可以使用另一个分部类来扩展模型,而不必为自动生成而烦恼。
什么时候使用C#分部类比较合适?