Руководство пользователя
-
Руководство по NTTX Advisors
- Терминал NetTradeX Advisors
-
Статьи
-
NetTradeX Language: Введение
- Основы языка
- Функции языка
-
Cистемные объекты языка
- Сделки
- Ордера
- Индикаторы
- Объектно-ориентированное программирование
-
DLL файлы
-
Объект Account
-
Объект Bars
-
Объект Chart
-
Объект datetime
-
Объект History
-
Объект file
-
Объект Globals
-
Объект Math
-
Объект Symbols
-
Объект System
В языке NTL+ отсутствует множественное наследование, но иногда может понадобиться реализовать идентичный код в нескольких классах. Для того чтобы избежать повторения кода, рекомендуется использовать mixin-классы.
Mixin-классы позволяют объявлять частичную структуру класса, которая будет, впоследствии, включена в другие классы. Mixin-классы не являются типами, поэтому нельзя создавать экземпляры таких классов.
Для объявления mixin-класса необходимо добавить ключевое слово mixin перед class, а после class указать любой, разрешенный в языке, идентификатор, который будет являться именем нового класса.
Когда mixin-класс включается в объявление другого класса, все свойства и методы из mixin-класса автоматически переносятся в основной класс.
Пример 1. Использование метода из mixin-класса
mixin class Mxn { datetime dt; void printTime() { System.Print(""+dt); } } class Cls : Mxn { void Method() { System.Print("Current time"); printTime(); // property 'dt' could also be used here as if it were declared in this class } } int Run() { Cls x; x.Method(); //Mxn a; - it is forbidden to create such an instance return(0); }
Свойства и методы, которые уже объявлены в основном классе не будут включены заново. Таким образом, mixin-класс может обеспечивать реализацию методов по-умолчанию, которые будут переопределены в других классах, использующих mixin-класс.
Методы mixin-класса будут скомпилированы в контексте основного класса, поэтому mixin-класс может работать со свойствами и методами основного класса, как будто эти методы и свойства объявлены в нем самом.
Пример 2. Переопределение метода из mixin-класса
mixin class Mxn { void X() { System.Print("Default implementation"); } void Y() { System.Print("time="+tm); // pay attention that 'tm' is not declared in 'Mxn' but it can be used here } } class Cls : Mxn { datetime tm; void X() { System.Print("Overriden behaviour"); // this method will override the method in 'Mxn' class } } int Run() { Cls a; a.X(); a.Y(); return(0); }
Создаваемый класс может использовать несколько mixin-классов, для этого имена mixin-классов указываются через запятую. Обратите внимание, что если производный класс наследует от базового класса и одновременно использует mixin-класс, то методы mixin-класса переопределяют методы базового класса, точно так, как если бы эти методы сразу были реализованы в производном классе. Отличное поведение у свойств классов при совпадении имен: свойства из mixin-классов не включаются в производный класс, и используется свойства из базового класса.
Пример 3. Использование наследования и mixin-класса
class BaseClass { int property = 1; void MethodA() { System.Print("Base class"); } } mixin class Mxn { int property = 2; void MethodA() { System.Print("Mixin class"); } } class Cls : BaseClass, Mxn { } int Run() { Cls a; a.MethodA(); // prints Mixin class System.Print("a.property="+a.property); // prints '1' return(0); }