有没有一种方法可以让局部类的构造函数调用另一个可能已经定义或未定义的方法?
基本上,我的局部类构造函数被定义为:
public partial class Test
{
public Test()
{
//do stuff
}
}
我希望能够在类构造函数调用后插入额外的代码。
另外,有没有办法在构造函数调用后注入多个文件中的额外代码?
有没有一种方法可以让局部类的构造函数调用另一个可能已经定义或未定义的方法?
基本上,我的局部类构造函数被定义为:
public partial class Test
{
public Test()
{
//do stuff
}
}
我希望能够在类构造函数调用后插入额外的代码。
另外,有没有办法在构造函数调用后注入多个文件中的额外代码?
C#支持 partial methods 特性。这允许一个部分类定义一个方法声明,然后由另一部分可以选择地定义。
Partial 方法有一些限制:
Partial 方法是隐式密封和私有的。
然而,在同一个 partial 类的两个不同部分中实现相同的 partial 方法是不可能的。通常情况下,partial 方法在代码生成的 partial 类中被使用,作为一种允许非生成部分扩展或自定义生成部分行为的方式(有时反过来)。如果一个 Partial 方法被声明但没有在任何类部分中实现,则编译器将自动消除对它的任何调用。
下面是一个代码示例:
public partial class PartialTestClass
{
partial void DoSomething();
public PartialTestClass() { DoSomething(); }
}
public partial class PartialTestClass
{
partial void DoSomething() { /* code here */ }
}
搜索“partial methods”。它们可以完全满足你的需求。
例如:
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
}
}
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