有没有一种方法可以让分部类的构造函数调用另一个可以定义或未定义的方法?
基本上我的分部类构造函数是这样定义的:
public partial class Test
{
public Test()
{
//do stuff
}
}
我希望能够以某种方式插入额外的代码,以便在类构造函数被调用后运行。
另外,有没有办法让多个文件在构造函数被调用后注入额外的代码?
发布于 2009-10-16 21:28:38
C#确实支持partial methods的功能。这允许分部类定义向前声明一个方法,然后分部类的另一部分可以有选择地定义该方法。
分部方法有一些限制:
新方法必须是空类型(不返回),不能接受输出参数,但可以接受引用parameters
分部方法是隐式密封的和私有的。
但是,不可能让分部类的两个不同部分实现相同的分部方法。通常,在代码生成的分部类中使用分部方法,以允许未生成的部分扩展或自定义生成的部分的行为(有时反之亦然)。如果声明了一个分部方法,但没有在任何类部分中实现,编译器将自动消除对它的任何调用。
下面是一个代码示例:
public partial class PartialTestClass
{
partial void DoSomething();
public PartialTestClass() { DoSomething(); }
}
public partial class PartialTestClass
{
partial void DoSomething() { /* code here */ }
}
发布于 2009-10-16 21:27:15
搜索“分部方法”。他们会完全按照你的要求去做。
例如:
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
}
}
发布于 2009-10-16 13:28:14
在C# 3.0中,你可以使用所谓的partial methods -可以调用的方法,即使它们并不真正存在。
如果它们没有在任何分部类文件中定义,则.NET编译器/链接器将删除对它们的调用。
因此,您可以定义一个Customer类:
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
https://stackoverflow.com/questions/1580509
复制