在同一个namespace中,写了一个class,放在一个文件中不方便管理,想分成两个文件存放,怎么处理?
解决方案 »
- 现在有两个值插不进去,"IDD","aa" 麻烦大家帮忙看看
- 请教Clear()和Dispose()
- 快捷键设置
- C#动态菜单
- 怎样将datagridview中的所有行加宽成原来的2倍并能自动换行?
- 求Winform下datagrid设置某一列颜色的方法
- 请教:(三楼楼长)的OA问题,我安装以后可以运行,但是无法打开和编辑。打开项目时要求输入用户名口令,然后显示:您没有修改这篇文档的权
- 关于winsock的GetData问题
- 急!关于XML转换和WebService调用的问题
- 如何动态创建带virtual 的属性?
- DataGridView中未绑定列DataGridViewComboBoxColumn默认值怎么设置
- 100分,求使用xpath提取指定的数据?
我再把问题描述清楚一些。原来有一个文件:
my.cs
namespace myTest
{
public sealed class myClass : .....
{
public myFunc1(...)
{
....
} public myFunc2(...)
{
....
}
}
}现在我想把my.cs分为my1.cs和my2.cs:
my1.cs
namespace myTest
{
public sealed class myClass : .....
{
public myFunc1(...)
{
....
}
}
}my2.cs
namespace myTest
{
public sealed class myClass : .....
{
public myFunc2(...)
{
....
}
}
}但如果仅仅这样,在编译时会提示重复定义myClass,怎么处理呢?
部分类怎么实现呢?
public partial class MyClass
{}文件二:
partial class MyClass
{}但只有Framework2.0才支持,是.net新舔加的功能,后台实现时编译器会把2个文件合在一起再编译
C# 1.1 要求将类的全部代码放在一个文件中。而 C# 2.0 允许将类或结构的定义和实现分开放在多个文件中。通过使用 new partial 关键字来标注分割,可以将类的一部分放在一个文件中,而将另一个部分放在一个不同的文件中。例如,可以将下面的代码放到文件 MyClass1.cs 中:public partial class MyClass
{
public void Method1()
{...}
}在文件 MyClass2.cs 中,可以插入下面的代码:public partial class MyClass
{
public void Method2()
{...}
public int Number;
}实际上,可以将任一特定的类分割成任意多的部分。局部类型支持可以用于类、结构和接口,但是不能包含局部枚举定义。局部类型是一个非常有用的功能。有时,我们需要修改机器生成的文件,例如 Web 服务客户端包装类。然而,当重新生成此包装类时,对该文件的修改将会被丢弃。通过使用局部类,可以将这些改变分开放在单独的文件中。ASP.NET 2.0 将局部类用于 code-beside 类(从 code-behind 演变而来),单独存储页面中机器生成的部分。Windows 窗体使用局部类来存储 InitializeComponent 方法的可视化设计器输出以及成员控件。通过使用局部类型,两个或者更多的开发人员可以工作在同一个类型上,同时都可以从源控制中签出其文件而不互相影响。您可以问自己,如果多个不同的部分对同一个类做出了相互矛盾的定义会出现什么样的后果?答案很简单。一个类(或一个结构)可能具有两个不同的方面或性质:累积性的 (accumulative) 和非累积性的 (non-accumulative)。累积性的方面是指类可以选择添加它的各个部分,比如接口派生、属性、索引器、方法和成员变量。例如,下面的代码显示了一个部分是如何添加接口派生和实现的:public partial class MyClass
{}
public partial class MyClass : IMyInterface
{
public void Method1()
{...}
public void Method2()
{...}
}非累积性的方面是指一个类型的所有部分都必须一致。无论这个类型是一个类还是一个结构,类型可见性(公共或内部)和基类都是非累积性的方面。例如,下面的代码不能编译,因为并非 MyClass 的所有部分都出现在基类中:public class MyBase
{}
public class SomeOtherClass
{}
public partial class MyClass : MyBase
{}
public partial class MyClass : MyBase
{}
//Does not compile
public partial class MyClass : SomeOtherClass
{}除了所有的部分都必须定义相同的非累积性部分以外,只有一个部分能够重写虚方法或抽象方法,并且只有一个部分能够实现接口成员。C# 2.0 是这样来支持局部类型的:当编译器构建程序集时,它将来自多个文件的同一类型的各个部分组合起来,并用 Microsoft 中间语言 (Microsoft intermediate language, MSIL) 将这些部分编译成单一类型。生成的 MSIL 中不含有哪一部分来自哪个文件的记录。正如在 C# 1.1 中一样,MSIL 不含有哪个文件用于定义哪个类型的记录。另外值得注意的是,局部类型不能跨越程序集,并且通过忽略其定义中的 partial 限定符,一个类型可以拒绝包含其他部分。因为编译器所做的只是将各个部分累积,所以一个单独的文件可以包含多个部分,甚至是包含同一类型的多个部分(尽管这样做的意义值得怀疑)。在 C# 中,开发人员通常根据文件所包含的类来为文件命名,这样可以避免将多个类放在同一个文件中。在使用局部类型时,我建议在文件名中指示此文件包含哪个类型的哪些部分(例如 MyClassP1.cs、MyClassP2.cs),或者采用其他一致的方式从外形上指示源文件的内容。例如,Windows 窗体设计人员将用于该窗体的局部类的一部分存放在 Form1.cs 中,并将此文件命名为 Form1.Designer.cs。局部类的另一个不利之处是,当开始接触一个不熟悉的代码基时,您所维护类型的各个部分可能遍布在整个项目的文件中。在这种情况下,建议您使用 Visual Studio Class View,因为它可以将一个类型的所有部分积累起来展示给您,并允许您通过单击它的成员来导航各个不同的部分。导航栏也提供了这个功能。http://www.microsoft.com/china/msdn/library/langtool/vcsharp/CreElegCodAnymMeth.mspx?mfr=true
多谢songhtao(三十年孤独)的提醒,让我知道部分类这个名词,一开始我用Google搜了半天也没有结果。结帖。