首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >分部类构造函数

分部类构造函数
EN

Stack Overflow用户
提问于 2009-10-16 21:24:16
回答 3查看 55.8K关注 0票数 39

有没有一种方法可以让分部类的构造函数调用另一个可以定义或未定义的方法?

基本上我的分部类构造函数是这样定义的:

代码语言:javascript
代码运行次数:0
运行
复制
public partial class Test
{
     public Test()
     {
          //do stuff
     }
}

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

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

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2009-10-17 05:28:38

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

分部方法有一些限制:

新方法必须是空类型(不返回),不能接受输出参数,但可以接受引用parameters

  • they不能是虚的或外部的,不能覆盖或覆盖另一个方法(通过“”关键字)

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

但是,不可能让分部类的两个不同部分实现相同的分部方法。通常,在代码生成的分部类中使用分部方法,以允许未生成的部分扩展或自定义生成的部分的行为(有时反之亦然)。如果声明了一个分部方法,但没有在任何类部分中实现,编译器将自动消除对它的任何调用。

下面是一个代码示例:

代码语言:javascript
代码运行次数:0
运行
复制
 public partial class PartialTestClass
 {
     partial void DoSomething();

     public PartialTestClass() { DoSomething(); }
 }

 public partial class PartialTestClass
 {
     partial void DoSomething()  { /* code here */ }
 }
票数 57
EN

Stack Overflow用户

发布于 2009-10-17 05:27:15

搜索“分部方法”。他们会完全按照你的要求去做。

例如:

代码语言:javascript
代码运行次数:0
运行
复制
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
     }
}
票数 9
EN

Stack Overflow用户

发布于 2009-10-16 21:28:14

在C# 3.0中,你可以使用所谓的partial methods -可以调用的方法,即使它们并不真正存在。

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

因此,您可以定义一个Customer类:

代码语言:javascript
代码运行次数:0
运行
复制
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在这类通知方法上使用了大量的时间。

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

Marc

票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1580509

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档