Некоторые сноб-кодеры смотрят на них свысока как на прославленную глобализацию. Точно так же, как многие люди ненавидят утверждение goto , есть и другие, которые ненавидят идею когда-либо использовать глобальный . Я видел, как несколько разработчиков пошли на экстраординарную работу, чтобы избежать глобального , потому что они рассматривали возможность использования одного из них как допущение неудачи. Странно, но это правда.
На практике паттерн Singleton - это просто метод программирования, который является полезной частью вашего набора концепций. Время от времени вы можете обнаружить, что это идеальное решение, и поэтому используйте его. Но использовать его просто так, чтобы вы могли похвастаться использованием шаблона проектирования , так же глупо, как отказываться от его использования, потому что это всего лишь глобальный .
С сериализатором xml вы ограничены - он не такой универсальный, как (скажем) некоторые из параметров binaryformatter / ISerializable
. Одна из частых уловок - иметь второе свойство для сериализации:
[XmlIgnore]
public Uri Uri {get;set;}
[XmlAttribute("uri")]
[Browsable(false), EditorBrowsable(EditorBrowsableState.Never)]
public string UriString {
get {return Uri == null ? null : Uri.ToString();}
set {Uri = value == null ? null : new Uri(value);}
}
Два просматриваемых атрибута скрывают его от просмотра (но для его использования он должен быть в общедоступном API для XmlSerializer
). XmlIgnore
указывает ему не пробовать Uri
; а [XmlAttribute (...)]
(или [XmlElement (...)]
) указывает ему переименовать UriString
при (де) сериализации .
(обратите внимание, что EditorBrowsable
применяется только к коду вне сборки, объявляющей тип)
Реализуйте IDeserializationCallback и используйте это поле самостоятельно.
http://msdn.microsoft.com/en-us/library/system .runtime.serialization.ideserializationcallback.aspx
Класс Uri реализует интерфейс ISerializable , поэтому он должен иметь возможность позаботиться о сериализации / десериализации.
Uri уже поддерживает сериализацию, поэтому я не верю, что вам нужно что-то делать.
http://msdn.microsoft.com/en-us/library/system.uri ( VS.80) .aspx