什么是部分课程?

它是什么以及如何在C#中使用。
你能在Python / Perl中使用相同的概念吗?

这里已经解释了c#partial类,所以我将只介绍python部分。 您可以使用多重inheritance来优雅地分发类的定义。

class A_part1: def m1(self): print "m1" class A_part2: def m2(self): print "m2" class A(A_part1, A_part2): pass a = A() a.m1() a.m2() 

部分类型 (它不必是类;结构和接口也可以是部分类型)基本上是单个类型,其代码分布在多个文件中。

这样做的主要用途是允许代码生成器(例如Visual Studio设计器)“拥有”一个文件,而手写代码则放在另一个文件中。

我不知道Python / Perl是否具有相同的function。

部分类只是包含在多个文件中的类。 有时,一部分可以是机器生成的,另一部分是用户编辑的。

我在C#中使用它们时,我正在制作一个有点太大的课程。 我将把访问器和构造函数放在一个文件中,并将所有有趣的方法放在不同的文件中。

在Perl中,您只需要两个(或更多)文件,每个文件都声明自己在一个包中:

(主程序)

  use MyClass; 

(在MyClass.pm中)

  use MyClassOtherStuff; package MyClass; # [..class code here...] 

(在MyClassOtherStuff.pm中)

  package MyClass; # [...rest of code here...] 

已经解释了部分类型的概念。

这可以在python中完成。 例如,在python shell中执行以下操作。

 class A(object): pass obj = A() def _some_method(self): print self.__class__ A.identify = _some_method obj.identify() 

因为python是一种动态语言,所以你不需要像partial类这样的概念。 在python中可以在运行时扩展具有function的对象,因此可以将类声明分解为不同的文件

部分类型是一种类型,其声明在多个文件之间分隔。 如果你有一个很大的类(对于一个典型的开发人员来说很难处理和读取),在单独的文件中分离该类定义并在每个文件中放入一个逻辑上分开的代码段(例如所有公共文件),那么使用它们是有意义的。一个文件中的方法和属性,其他的私有,db处理第三个代码等等。)

不,你在Python中没有相同的语法元素。

Python也有元类,但更像是模板类而不是部分类。 元类使用的一个很好的例子是Django ORM。 所有表模型都inheritance自基础模型类,该类也从元类中获取function。 这是一个非常酷的概念,可以启用像模式这样的活动记录(它是完整的活动记录吗?)。

当您通过某些工具auto-generated code时,部分类很方便。 有关示例,请参阅问题使用WCF进行架构优先服务开发的项目结构 。

您可以将逻辑放在分部类中。 即使销毁并重新创建了自动生成的文件,您的逻辑仍将保留在分部类中。