部分课程的目的是什么?

时间:2012-02-27 23:05:06

标签: c# .net

我阅读about partial classes,例如,我理解Visual Studio创建Windows窗体时使用它们的原因,但不排除

  

在处理大型项目时,将类分散在单独的文件上   使多个程序员能够同时处理它

后来我读了this example,我注意到大多数类被声明为部分类。为什么呢?

5 个答案:

答案 0 :(得分:14)

部分类有用的一个非常好的例子是当一个工具(比如VS)自动生成类时,你希望能够扩展该类的功能,并且在工具需要时不会丢失代码重新生成其代码。例如,当您使用Visual Studio实体数据模型设计器时,实体(类)将生成为部分。

答案 1 :(得分:6)

部分类允许代码不仅添加到生成的类,还实现可选功能。

例如,可能会生成执行属性验证的代码(通过IDataErrorInfo),但是在生成时无法确定每个属性的验证,分部类允许开发人员稍后指定验证。

生成的文件:

public partial class MyClass : IDataErrorInfo
{
    partial void ValidateMyProperty(ref string error);

    public string this[string propertyName]
    {
        get
        {
            string error = String.Empty;
            if (propertyName == "MyProperty")
                ValidateMyProperty(ref error);

            return error;
        }
    }

    public string Error { get { return String.Empty; } }

    public int MyProperty { get; set; }
}

开发人员实施的文件:

public partial class MyClass
{
    partial void ValidateMyProperty(ref string error)
    {
        if (MyProperty < 0)
            error = "MyProperty cannot be negative.";
    }
}

答案 2 :(得分:5)

如果您有一个大类,那么在多个源文件中拆分定义会很有帮助。

此外,如果要扩展生成的类(例如,从T4模板或ORM) - 或者在您不能或不应该修改原始源文件的任何情况下,您可以使用附加的部分类定义,用于添加在模板或ORM重新生成原始类时不会删除的新功能。

修改

只是一个观察,但你的引用:

  

在处理大型项目时,将类分散在单独的文件上   使多个程序员能够同时处理它

尽管来自MSDN,但与我并不相符。如果您正在使用一个不错的源代码控制系统(如TFS甚至是svn),那么在源文件中进行合并,其中每个开发人员正在处理不同的方法。说使用部分类使得多个开发人员更容易在同一个类上工作(并且,我可能会下注)可能会鼓励那里的人将他们解决方案中每个类中的每个方法和属性拆分成单独的源文件。那很糟。特别糟糕。就像在,新的雇员谈判工资一样,应该被披露在前面。

答案 3 :(得分:1)

一个实际应用是,您可以在命名空间范围内的多个位置修改分部类。为了便于阅读,您可以将一个类拆分为多个文件。

IE:
命名空间“Bleh”

中的在HelloWorld.cs
public partial class testClass {
  private int intMember;
  public string stringMember;
}

名称空间“Bleh”中的HelloWorld2.cs

public partial class testClass {
  private int intAnotherInt;
  public string stringAnotherString;
}

声明的两个类实际上代表了相同的东西,但目的是将类拆分为文件。这两个组合实际上看起来像:

public partial class testClass {
  private int intAnotherInt; // Our int from HelloWorld2.cs
  public string stringAnotherString; // Our string from HelloWorld2.cs
  private int intMember; // Our int from HelloWorld.cs
  public string stringMember; // Our string from HelloWorld.cs
}

更多信息here

答案 4 :(得分:0)

正如您发布的链接所提到的,这意味着您可以将一个类拆分为多个文件,并在编译时将其重新组合到一个类中。

至于您发布的其他链接...部分类是这样标记的,因为标记(aspx)有一个设计器生成的类,可以让您访问我相信的标记中定义的内容......

所以,有三个文件...... productlist.aspx,productlist.cs和productlist.designer.cs

productlist.aspx 是标记

productlist.cs 是从标记文件引用并包含代码的部分类。

productlist.designer.cs 是生成的部分类,它与上面的.cs文件结合使用