【问题标题】:Overwriting Constructor of a class from outisde从外部覆盖类的构造函数
【发布时间】:2011-05-01 12:36:49
【问题描述】:

所以,问题很简单: 如何从外部覆盖类的构造函数。问题本身是,我有一个已经编译的类,它已经有一些构造函数,但是那些程序员的白痴删除了一个构造函数,所以我现在无法 XML(de)Serialize 它......

所以他们所做的是:
他们改变了 矢量2(); 向量2(x,y); 进入 向量2(x=0,y=0);

但我的问题是,序列化程序并没有那么聪明地意识到他仍然可以创建类,并且更改整个代码将是一个痛苦的 * * *

【问题讨论】:

  • 错误报告?让他们把空的构造函数放回去?
  • 也许是因为某种原因将其删除?
  • 旁注:表示二维向量的可变引用类型。这给了你一些非常奇怪的语义,人们不会想到类似值的东西。

标签: c# .net constructor overwrite


【解决方案1】:

从它继承并自己提供预期的构造函数。

您可以在代码需要 Vector2 实例的地方使用派生类的反序列化实例:

public class Vector3: Vector2 {
    public Vector3(): base(0, 0) {}
}

// Your code:
Vector2 vector = (Vector3)XmlSerializer.Deserialize(xmlReader);

【讨论】:

  • @mlvljr - 确实如此,特别是如果它是密封的。
  • @Seshiro - 我已经更新了我的答案,以解释如何使用这种技术来解决您的特定问题。
【解决方案2】:

如果该类被标记为部分,您可以使用您自己的部分类声明添加它:

public partial class CompiledClass
{
   public CompiledClass() { }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-02-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-17
    • 2014-06-09
    • 1970-01-01
    • 1970-01-01
    • 2010-09-19
    相关资源
    最近更新 更多