Язык программирования C# отвечает трём основным принципам объектно-ориентированного программирования (ООП):
- Инкапсуляция - скрывает детали внутренней реализации объектов и предохраняет целостность данных;
Наследование - позволяет строить новые определения классов на основе существующих;
Полиморфизм - позволяет трактовать связанные объекты сходным образом;
...
namespace ElementVirtual
{
[About(version = "1.0", author = "Developer Name", mail = "developer@mail.net")]
[ToolboxBitmap(typeof(Derived), "Resources.DerivedClass.ico")]
[Install("_base", "A simple example of inheritance", "Core")]
[Type("Derived", "An example of inheritance", tab = "Core")]
public class Derived : Example
{
public Derived(PackElement pe, SDK sdk, int x, int y) : base(pe, sdk, x, y) { }
}
...
Ранее в теме обещал показать неочевидный, но быстрый способ добавления иконки в ресурсы сборки. Для этого надо предварительно подготовленный файл иконки поместить в папку ресурсов проекта. В нашем случае это будет папка C:\Projects\MyElementCore\MyElementCore\Resources. Добавляем ещё одну иконку DerivedClass.ico в ресурсы сборки, используя «быстрый» способ:
Demo
Вот так будет выглядеть код элементов после вставки:
Новый элемент надо поместить на панель инструментов, чтобы можно было его вставлять в схемы. Сделать это можно ещё раз открыв файл сборки в конструкторе через меню Open или набросить его на окно программы. Для проверки работы «нового» элемента в предыдущем примере заменяем наш элемент Example элементом Derived:
Demo
Теперь надо сделать наследование для скрипта проекта Windows Forms. Для этого надо добавить в ресурсы сборки ещё один скрипт с именем wfDerived.cs и следующим содержанием:
//css_pc wfPrecompiler.cs;
public class Derived : Example
{
public override bool init(object entry)
{
Debug.WriteLine("{0}.init()".fString(this.codename));
return base.init(this);
}
}
Также необходимо дополнить метод инициализации элемента Example следующим кодом:
public override void init(int flag = 0)
{
base.init(flag);
...
string context = Path.Combine(this.parent.getMSDK().pack.pathCode(), "wfExample.cs");
if (File.Exists(context))
{
this.linkedPath.Add(context);
return;
}
string result = Helpers.compileScript(Properties.Resources.wfExample);
if (Helpers.validatePath(ref result))
this.linkedPath.Add(result);
else if (!result.isEmpty())
Debug.WriteLine(result, "!");
}
Это добавление компилирует скрипт проекта Windows Forms в сборку на диске и сохраняет путь к ней в свойствах элемента. Вот так будет выглядеть код элементов после вставки:
Проверим элемент в работе:
Demo
Мы получили функциональную копию нашего элемента Example. Конечно мы можем определить для элемента Derived свою собственную функциональность, которая будет расширением базовой, наследованной из элемента Example. Можете скачать полный код проекта: MyElementCore.zip