Вверх ↑
Главный модератор
Ответов: 2997
Рейтинг: 395
#1: 2019-11-18 22:05:37 ЛС | профиль | цитата
    Наследование элемента

  Язык программирования C# отвечает трём основным принципам объектно-ориентированного программирования (ООП):
    Инкапсуляция - скрывает детали внутренней реализации объектов и предохраняет целостность данных;
    Наследование - позволяет строить новые определения классов на основе существующих;
    Полиморфизм - позволяет трактовать связанные объекты сходным образом;
  По сути, наследование позволяет расширять поведение базового (или родительского) класса, наследуя основную функциональность в производном подклассе (также именуемом дочерним классом). Это можно использовать при создании нового элемента, который будет наследовать функции другого. Давайте создадим новый элемент, который наследует функции нашего. Для этого добавим следующий код в файл Example.cs нашего примера:
...
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);
}
}
и вернуть блок using ссылок на пространства имён сторонних сборок вместо тегированного комментария скрипта элемента Example:


  Также необходимо дополнить метод инициализации элемента 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
карма: 6
Дорогу осилит идущий. Install/Update HiAsm.NET
0
Редактировалось 3 раз(а), последний 2020-01-02 20:15:26