我不认为这是可能的,但如果是,那么我需要它:)
我有一个由Visual Studio2008从wsdl.exe命令行工具自动生成的代理文件。
代理输出是分部类。我想覆盖生成的默认构造函数。我不想修改代码,因为它是自动生成的。
我尝试创建另一个分部类并重新定义默认构造函数,但不起作用。然后,我尝试使用override和new关键字,但不起作用。
我知道我可以从分部类继承,但这意味着我必须更改所有的源代码以指向新的父类。我不想这样做。
有什么想法、变通方法或技巧吗?
//Auto-generated class
namespace MyNamespace {
public partial class MyWebService : System.Web.Services.Protocols.SoapHttpClientProtocol {
public MyWebService() {
string myString = "auto-generated constructor";
//other code...
}
}
}
//Manually created class in order to override the default constructor
namespace MyNamespace {
public partial class MyWebService : System.Web.Services.Protocols.SoapHttpClientProtocol {
public override MyWebService() { //this doesn't work
string myString = "overridden constructor";
//other code...
}
}
}
发布于 2008-10-29 18:08:01
这是不可能的。分部类本质上是同一个类的一部分;任何方法都不能定义两次或被覆盖,这包括构造函数。
您可以在构造函数中调用一个方法,并且只在另一个部分文件中实现它。
发布于 2010-01-09 09:24:53
我也遇到过类似的问题,我生成的代码是由DBML文件创建的(我使用的是Linq-to-SQL类)。
在生成的类中,它在构造函数的末尾调用一个称为OnCreated()的局部空函数。
长话短说,如果你想保留生成的类为你做的重要的构造函数内容(你可能应该这样做),那么在你的分部类中创建以下内容:
partial void OnCreated()
{
// Do the extra stuff here;
}
发布于 2011-09-27 23:52:41
实际上,现在这是可能的,因为已经添加了分部方法。这是文档:
http://msdn.microsoft.com/en-us/library/wa80x488.aspx
基本上,这个想法是您可以在定义分部类的文件中声明和调用方法,但不实际定义该文件中的方法。在另一个文件中,您可以定义该方法。如果您正在构建一个未定义方法的程序集,则ORM将删除对该函数的所有调用。
因此,在上面的例子中,它看起来像这样:
//自动生成的类
namespace MyNamespace {
public partial class MyWebService : System.Web.Services.Protocols.SoapHttpClientProtocol {
public MyWebService() {
string myString = "auto-generated constructor";
OtherCode();
}
}
}
partial void OtherCode();
//手动创建类,以重写默认构造函数
partial void OtherCode()
{
//do whatever extra stuff you wanted.
}
它有一定的局限性,在这种情况下,如果您有一个需要更改的生成文件,它可能不是正确的解决方案,但对于试图覆盖分部类中的功能的其他人来说,这可能非常有帮助。
https://stackoverflow.com/questions/247800
复制相似问题