在同一个namespace中,写了一个class,放在一个文件中不方便管理,想分成两个文件存放,怎么处理?

解决方案 »

  1.   

    怎么没人回答啊?
    我再把问题描述清楚一些。原来有一个文件:
    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,怎么处理呢?
      

  2.   

    .net不允许一个class分成N个文件,但是允许N个class放在同一个文件。
      

  3.   

    晕,怎么会这样呢?用惯了C++,现在来用C#还真是不习惯。如果一个class要两个人来写,难道写好后还得合在一起吗?这样以后修改源代码岂不是太麻烦了?
      

  4.   

    .net 2005支持部分类如果我们理解了在什么地方使用和如何使用部分类的话部分类将是非常有用的。他们允许设计器产生的代码和应用代码清晰地分离到不同的物理文件中,在扩展功能方面有更多的灵活性。例如,在.NET1.1中VS.NET2003产生的强类型的DataSet的代码并没有直接的方式重载代码,这是因为VS.NET2003重新产生强类型的DataSet代码时将重载开发者对代码的改变。VS.NET2005使用部分类这种方式允许我们实现少数别的定制的接口或者属性/方法在许多场景下是非常有用的。别的例子:有别的场景我们需要实现多个接口但想在一个类中实现。三个开发者能够创建三个类文件每个实现不同的接口,别的开发者可能实现派生于一个基类的同样的类。当编译时,产生的类将派生于单个的基类并实现所有的接口。从一个开发者的观点看,一旦类被编译,一个部分类就如同一个常规的类一样。VS.NET2005对设计器产生的控件/窗体代码使用部分类。这种方式分离了应用代码和设计器产生的代码,使程序更容易维护。
      

  5.   

    to:songhtao(三十年孤独)
    部分类怎么实现呢?
      

  6.   

    文件一:
    public partial class MyClass
    {}文件二:
    partial class MyClass
    {}但只有Framework2.0才支持,是.net新舔加的功能,后台实现时编译器会把2个文件合在一起再编译
      

  7.   

    局部类型
    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
      

  8.   

    哈哈,还是Google好用,用“C#”和“部分类”搜寻了一下,就找到解决办法了,原来是在class之前加上partial关键字。
    多谢songhtao(三十年孤独)的提醒,让我知道部分类这个名词,一开始我用Google搜了半天也没有结果。结帖。
      

  9.   

    几年不来,net_lover兄都搞到砖石啦,我还是那两颗红星,原地踏步,哈哈