Главная » C#, Компоненты » Динамическое управление сериализацией

0

Атрибуты DesignerSerializationVisibility И DefaultValue определяют необходимость сериализации статически, т. е. в конструкторы этих методов передаются константы. Если же необходимо управлять сериализацией программно, то нужно использовать другой способ: вместо статических атрибутов нужно сделать метод, имя которого состоит из строки shouldserialize и имени свойства. Например, для управления сериализацией свойства BackColor будет использоваться метод shouidSeriaiizeBackCoior. В случае свойства strings метод управления должен называться shouidseriaiizestrings (листинг 10.7). Использовать одновременно и метод управления, и атрибуты нельзя.

Атрибут DefaultValue опеределяет значение свойства по умолчанию (см. разд. 5.3). Аналогично методу, определяющему необходимость сериализации, для меню Reset можно создать метод Р-езегимяСвойства, который будет вызываться при выборе этого меню. Например, для свойства strings метод будет выглядеть так:

private void R^setStrings{) {

stringsValue = new string[0];

}

При этом следует учитывать, что активность меню Reset зависит от значения метода shouldserialize. Если этот метод возвращает true, меню будет активным, а если false, то меню недоступно.

Листинг 10.7

us ing System;

using System.ComponentModel; using System.ComponentModel.Design; using System.Drawing; using System.Windows.Forms;

using System.CorrponentModel.Design.Serialization; using System.Text;

namespace ContentSerializationExample

{

public class SerializationDemoControl : UserControl

f

private String[] stringsvalue;

public SerializationDemoControl() {

// Инициализация обязательна this.Strings = new string[0];

}

private bool ShouldSerializeStrings() f

return {stringsvalue != null) && (stringsvalue.Length > 0);

1

// Нельзя использовать и ShouldSerialize-MeTofl, // и атрибут DefaultValue // [DefaultValue(new String[0])] public String[] Strings (

get {

return this. stringsvalue;

1

set {

if {value != null) {

this.stringsvalue = value;

}

else I

this.stringsvalue = new string[0];

}

)

}

1

1

Литература:

Агуров П. В. C#. Разработка компонентов в MS Visual Studio 2005/2008. – СПб.: БХВ-Петербург, 2008. — 480 е.: ил.

По теме:

  • Комментарии