首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >用另一个分部类覆盖分部类的默认构造函数

用另一个分部类覆盖分部类的默认构造函数
EN

Stack Overflow用户
提问于 2008-10-29 18:02:37
回答 11查看 52.1K关注 0票数 53

我不认为这是可能的,但如果是,那么我需要它:)

我有一个由Visual Studio2008从wsdl.exe命令行工具自动生成的代理文件。

代理输出是分部类。我想覆盖生成的默认构造函数。我不想修改代码,因为它是自动生成的。

我尝试创建另一个分部类并重新定义默认构造函数,但不起作用。然后,我尝试使用override和new关键字,但不起作用。

我知道我可以从分部类继承,但这意味着我必须更改所有的源代码以指向新的父类。我不想这样做。

有什么想法、变通方法或技巧吗?

代码语言:javascript
复制
//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...
      }
   }
}
EN

回答 11

Stack Overflow用户

回答已采纳

发布于 2008-10-29 18:08:01

这是不可能的。分部类本质上是同一个类的一部分;任何方法都不能定义两次或被覆盖,这包括构造函数。

您可以在构造函数中调用一个方法,并且只在另一个部分文件中实现它。

票数 40
EN

Stack Overflow用户

发布于 2010-01-09 09:24:53

我也遇到过类似的问题,我生成的代码是由DBML文件创建的(我使用的是Linq-to-SQL类)。

在生成的类中,它在构造函数的末尾调用一个称为OnCreated()的局部空函数。

长话短说,如果你想保留生成的类为你做的重要的构造函数内容(你可能应该这样做),那么在你的分部类中创建以下内容:

代码语言:javascript
复制
partial void OnCreated()
{
    // Do the extra stuff here;
}
票数 70
EN

Stack Overflow用户

发布于 2011-09-27 23:52:41

实际上,现在这是可能的,因为已经添加了分部方法。这是文档:

http://msdn.microsoft.com/en-us/library/wa80x488.aspx

基本上,这个想法是您可以在定义分部类的文件中声明和调用方法,但不实际定义该文件中的方法。在另一个文件中,您可以定义该方法。如果您正在构建一个未定义方法的程序集,则ORM将删除对该函数的所有调用。

因此,在上面的例子中,它看起来像这样:

//自动生成的类

代码语言:javascript
复制
namespace MyNamespace {
   public partial class MyWebService : System.Web.Services.Protocols.SoapHttpClientProtocol {
      public MyWebService() {
         string myString = "auto-generated constructor";
         OtherCode();
      }
   }
}

partial void OtherCode();

//手动创建类,以重写默认构造函数

代码语言:javascript
复制
partial void OtherCode()
{
   //do whatever extra stuff you wanted.
}

它有一定的局限性,在这种情况下,如果您有一个需要更改的生成文件,它可能不是正确的解决方案,但对于试图覆盖分部类中的功能的其他人来说,这可能非常有帮助。

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

https://stackoverflow.com/questions/247800

复制
相关文章

相似问题

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