Руководство пользователя
-
Руководство по 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);
}