部分类构造函数

时间:2009-10-16 21:24:16

标签: c# .net constructor partial-classes

有没有办法让某个部分类'构造函数调用另一个我或未定义的方法?

基本上我的部分类构造函数已定义:

public partial class Test
{
     public Test()
     {
          //do stuff
     }
}

我希望能够以某种方式插入额外的代码,以便在调用类构造函数后运行。

另外,有没有办法在调用构造函数后有多个文件注入额外的代码?

3 个答案:

答案 0 :(得分:50)

C#确实支持partial methods的功能。这些允许部分类定义转发声明一个方法,然后部分类的另一部分可以选择定义。

部分方法有一些限制:

  • 它们必须是无效类型(不返回)
  • 他们不能接受参数,但他们可以接受参数
  • 它们不能是虚拟的或外部的,也不能覆盖或覆盖其他方法(通过“new”关键字)

部分方法是隐式密封和私密的。

然而,不可能使部分类的两个不同部分实现相同的部分方法。通常,在代码生成的部分类中使用部分方法作为允许非生成部分扩展或定制生成的部分的行为(或者反之亦然)的方式。如果声明了部分方法但未在任何类部件中实现,则编译器将自动消除对它的任何调用。

以下是代码示例:

 public partial class PartialTestClass
 {
     partial void DoSomething();

     public PartialTestClass() { DoSomething(); }
 }

 public partial class PartialTestClass
 {
     partial void DoSomething()  { /* code here */ }
 }

答案 1 :(得分:7)

好吧,在C#3.0中你可以拥有所谓的部分方法 - 可以被调用的方法,即使它们并不存在。

如果它们未在任何部分类文件中定义,则.NET编译器/链接器将删除对它们的调用。

所以你可以定义例如客户类:

partial class Customer
{
  string name;

  public string Name
  {
    get
    {
      return name;
    }
    set
    {
      OnBeforeUpdateName();
      OnUpdateName();
      name = value;
      OnAfterUpdateName();
    }
  }

  partial void OnBeforeUpdateName();
  partial void OnAfterUpdateName();
  partial void OnUpdateName();
}

将调用那些部分方法OnBeforeUpdateName()等,但如果你的所有部分类文件实际上都没有为它们实现任何内容,那么该调用将没有任何效果。 Linq-to-SQL将这段时间用于这些通知方法。

请参阅有关部分方法的博文:

马克

答案 2 :(得分:6)

搜索“部分方法”。他们会完全按照你的意愿行事。

例如:

public partial class Test
{
    public Test()
    {
         //do stuff

         DoExtraStuff();
    }

    partial void DoExtraStuff();
}


public partial class Test // in some other file
{
     partial void DoExtraStuff()
     {
         // do more stuff
     }
}