我不认为这是可能的,但如果是,那么我需要它:)
我有一个由Visual Studio 2008从wsdl.exe命令行工具自动生成的代理文件.
代理输出是部分类.我想覆盖生成的默认构造函数.我宁愿不修改代码,因为它是自动生成的.
我尝试制作另一个部分类并重新定义默认构造函数,但这不起作用.然后我尝试使用覆盖和新关键字,但这不起作用.
我知道我可以继承部分类,但这意味着我必须将所有源代码更改为指向新的父类.我宁愿不必这样做.
任何想法,解决方法或黑客?
//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... } } }
Tom Chantler.. 68
我有一个类似的问题,我生成的代码是由dbml文件创建的(我使用的是Linq-to-SQL类).
在生成的类中,它在构造函数的末尾调用一个名为OnCreated()的部分void.
长话短说,如果你想保留的重要构造的东西生成的类为你做(这你应该做的),然后在局部类创建以下文件:
partial void OnCreated() { // Do the extra stuff here; }
现在这是一个投票困境......与OP问题没有任何关系,这与L2S无关,所以不会有OnCreated,但你已经阻止我撞到桌子上,所以我认为+1. (3认同)
configurator.. 39
这是不可能的.部分类基本上是同一类的一部分; 没有方法可以定义两次或重写,包括构造函数.
您可以在构造函数中调用方法,并仅在其他零件文件中实现它.
我有一个类似的问题,我生成的代码是由dbml文件创建的(我使用的是Linq-to-SQL类).
在生成的类中,它在构造函数的末尾调用一个名为OnCreated()的部分void.
长话短说,如果你想保留的重要构造的东西生成的类为你做(这你应该做的),然后在局部类创建以下文件:
partial void OnCreated() { // Do the extra stuff here; }
这是不可能的.部分类基本上是同一类的一部分; 没有方法可以定义两次或重写,包括构造函数.
您可以在构造函数中调用方法,并仅在其他零件文件中实现它.
嗯,我认为一个优雅的解决方案如下:
//* AutogenCls.cs file //* Let say the file is auto-generated ==> it will be overridden each time when //* auto-generation will be triggered. //* //* Auto-generated class, let say via xsd.exe //* partial class AutogenCls { public AutogenCls(...) { } } //* AutogenCls_Cunstomization.cs file //* The file keeps customization code completely separated from //* auto-generated AutogenCls.cs file. //* partial class AutogenCls { //* The following line ensures execution at the construction time MyCustomization m_MyCustomizationInstance = new MyCustomization (); //* The following inner&private implementation class implements customization. class MyCustomization { MyCustomization () { //* IMPLEMENT HERE WHATEVER YOU WANT TO EXECUTE DURING CONSTRUCTION TIME } } }
这种方法有一些缺点(如一切):
目前尚不清楚何时在AutogenCls类的整个构建过程中将完全执行MyCustomization内部类的构造函数.
如果有必要为MyCustomization类实现IDiposable接口以正确处理MyCustomization类的非托管资源,我还不知道如何在不触及AutogenCls.cs文件的情况下触发MyCustomization.Dispose()方法......(但正如我告诉'还':)
但是这种方法与自动生成的代码有很大的区别 - 整个定制在不同的src代码文件中分开.
请享用 :)