分部类的两个我喜欢的问题:)

摘抄自 http://topic.csdn.net/u/20091027/18/6e70a9cc-7c7f-4fe4-b11a-24740c601933.html

1. 书上说“分部类允许将类代码放在多个文件中,所有部分都必须有相同的可访问性,如都是public、private。

可是VS创建Windows Form,自动产生的代码中,partial类为何有不同的访问限定?
Form1.Designer.cs中是:partial class Form1
Form1.cs中是: public partial class Form1 : Form

(1)类的默认修饰符是internal

(2)这根本不是访问权不同的问题,在C#中,允许你只在某一个partial里写修饰符,而在另外的地方省略

(3)类似的有:如果分部类继承自某一基类,你只需要在一处明确指明,其他partial的地方都可以省略

(4)当然,如果你愿意,你也可以在每一个partial都明确指明修饰符,甚至可以在某个地方指明一种修饰符,在另一个地方指明另一种修饰符,前提是不能发生冲突

个人理解:pratial的使用灵活性还是很强的~


2. 我创建一个控制台项目,program.cs中有一个partial类A,然后添加一个类文件class1.cs,在class1.cs中写部分类A的一 个方法。在VS中调试通过。然后我用csc将class1.cs编译成class1.dll。在VS中将class1.cs删去,并引用 class1.dll。这时再调试,就不能通过。说找不到写在class1中的partial类A的那个方法。

是不是我对partial类的理解哪里有误啊?

局部类型是一个纯语言层的编译处理,不影响任何执行机制——事实上C#编译器在编译的时候仍会将各个部分的局部类型合并成一个完整的类。

个人理解(目前无十足把握):编译生成的class1.dll中,已经包含完整的类A定义,里面的类A的定义是完整的,不再存在多个partial分部,出错并非由于dll中的分部和program.cs中的分部拼不到一起,而是dll中已经没有program.cs中所需要的另一个分部(人家有的是整个类A).

你可能感兴趣的:(问题)