它是什么以及如何在 C# 中使用它。
你能在 Python/Perl 中使用相同的概念吗?
8 回答
部分类型(它不必是类;结构和接口也可以是部分的)基本上是一种单一类型,其代码分布在多个文件中。
这样做的主要用途是允许代码生成器(例如 Visual Studio 设计者)“拥有”一个文件,而将手写代码放在另一个文件中。
恐怕我不知道 Python/Perl 是否具有相同的功能。
c# 部分类已经在这里解释过,所以我将只介绍 python 部分。您可以使用多重继承来优雅地分发类的定义。
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()
部分类只是一个包含在多个文件中的类。有时它的一部分是机器生成的,而另一部分是用户编辑的。
当我创建一个有点太大的类时,我在 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 是一种动态语言,所以你不需要像偏类这样的概念。在 python 中,可以在运行时扩展具有功能的对象,因此可以将类声明分解为不同的文件
Partial 类型是其声明在多个文件中分隔的类型。如果您有一个大类(对于典型的开发人员来说很难处理和阅读),那么使用它们是有意义的,将类定义分隔在单独的文件中,并在每个文件中放入逻辑上分隔的代码部分(例如所有公共方法和属性在一个文件中,私有在另一个文件中,db 处理代码在第三个文件中,依此类推..)
不,您在 Python 中没有相同的语法元素。
Python 也有元类,但它更像是一个模板类而不是部分类。使用元类的一个很好的例子是 Django ORM。您的所有表模型都继承自一个基模型类,该基模型类也从元类中获取功能。这是一个非常酷的概念,可以启用像模式这样的活动记录(它是完整的活动记录吗?)。
auto-generated code
当您使用某些工具时,部分课程会派上用场。请参阅问题Project structure for Schema First Service Development using WCF作为示例。
您可以将逻辑放在部分类中。即使自动生成的文件被销毁并重新创建,您的逻辑也会保留在部分类中。