Я пишу плагин для приложения с .NET API. Объекты программы могут иметь пользовательские атрибуты, применяемые с помощью двух методов типа корневого объекта, которые присваивают объектам пары ключ / значение.
BaseAppObject.GetUserString(string key, string value);
BaseAppObject.SetUserString(string key, ref string value);
Я создаю набор своих собственных пользовательских классов, которые действуют как классы-оболочки для экземпляров BaseAppObject
. Все мои классы являются производными от класса Node
, который имеет поле для хранения ссылки на BaseAppObject
. Другие свойства Node
и типы, производные от Node
, используют методы GetUserString
и SetUserString
связанного экземпляра BaseAppObject
для чтения или записи значений свойств непосредственно в или из связанного BaseAppObjects
.
Таким образом, когда приложение закрывается, вся информация, необходимая для регенерации этих классов-оболочек позже, сохраняется в реальном документе.
Вот упрощенная версия того, что у меня есть для моего конструктора базового класса:
public abstract class Node
{
BaseAppObject _baseObject;
public Node(BaseAppObject baseObject, string name)
{
this._baseObject = baseObject;
this.Name = name;
}
public string Name
{
get {
string name = "";
_baseObject.GetUserString("CPName", ref name);
return name;
}
set {
_baseObject.SetUserString("CPName", value);
}
}
}
Другие классы, полученные из Node
, могут добавлять дополнительные свойства, подобные этому.
public CustomClass:Node
{
public CustomClass(BaseAppObject baseObj,string name, string color):base(baseObj,name)
public string Color
{
get {
string name = "";
this.BaseObject.GetUserString("Color", ref name);
return name;
}
set {
this.BaseObject.SetUserString("Color", value);
}
}
}
Я пытаюсь найти лучший способ настроить конструкторы и другие методы моих классов для инициации и регенерации экземпляров моих классов. Мне нужно иметь возможность создавать новые экземпляры моих классов на основе clean экземпляров BaseAppObject
, для которых не определены пользовательские строки, а также регенерировать ранее существующий экземпляр моего класса на основе пользовательских строк, хранящихся в существующий BaseAppObject
.