Перезаписать конструктор класса из outisde - PullRequest
4 голосов
/ 27 октября 2010

Итак, вопрос прост для акса: Как я могу переписать конструктор класса извне. Сама проблема в том, что у меня есть класс, который уже скомпилирован, и у него уже есть некоторые конструкторы, но эти идиоты кодеров удалили конструктор, так что теперь я не могу его (де) сериализовать ...

Итак, что они сделали, это:
Они изменились Vector2 (); Vector2 (x, y); в Vector2 (х = 0, у = 0);

Но моя проблема в том, что Сериализатор не настолько умен, чтобы понять, что он все еще может создать класс, и изменение всего кода будет болезненным для * * *

Ответы [ 2 ]

9 голосов
/ 27 октября 2010

Наследуйте от него и предоставьте ожидаемый конструктор самостоятельно.

Вы можете использовать десериализованные экземпляры производного класса, где ваш код ожидает Vector2 экземпляров:

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

// Your code:
Vector2 vector = (Vector3)XmlSerializer.Deserialize(xmlReader);
3 голосов
/ 28 октября 2010

Если по какой-то причине класс был помечен как частичный, вы можете добавить его в собственное частичное объявление класса:

public partial class CompiledClass
{
   public CompiledClass() { }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...