Модификатор exclusive: наследуется всё, что не запрещено
В OverScript наследуются все методы, и видны в производных классах все, а не только public и protected, как в C#. Запрет наследования метода делается модификатором exclusive. Модификатора protected, который делает метод видимым в производных классах, в OverScript нет. Применять exclusive можно только к методам, а к переменным (полям) пока нельзя.
Допустим, мы хотим исключить метод класса-родителя из производного класса:
Bar b=new Bar();
b.Test2(); //Test2 at Bar
//b.Test(); //ошибка: функция не найдена
class Foo{
public exclusive Test(){WriteLine("Test at Foo");}
}
class Bar:Foo{
public Test2(){WriteLine("Test2 at Bar");}
}
Думаю, всё понятно. Теперь пример с конструктором:
new Bar(5L); //New at Bar. А без exclusive было бы: New at Foo (два конструктора было бы, и тот, который с long был бы подходящим).
class Foo{
exclusive New(long x){
WriteLine("New at Foo");
}
}
class Bar:Foo{
New(int x){
WriteLine("New at Bar");
}
}
Конструкторы в OverScript наследуются как обычные методы. Запрет наследования модификатором exclusive может помочь избежать возможных накладок, которые являются одной из причин отсутствия наследования конструкторов в других языках.
В OverScript наследуемые функции компилируются для каждого класса, если не помечены модификатором fixed. В C# не так, а fixed имеет другое назначение. Приведу пример, чем полезно отдельное компилирование функции для каждого класса, где она унаследована:
new Bar().Test(); //555
class Foo{
public Test(){WriteLine(GetNum());}
int GetNum(){return 123;}
}
class Bar:Foo{
int GetNum(){return 555;}
}
Теперь в Bar есть своя GetNum(), и Test() из Foo будет вызывать именно её. В C# пришлось бы сделать GetNum() виртуальной, а вызов виртуальных методов происходит значительно дольше обычных. В Python поведение как в OverScript, т.е. функции родительского класса вызывают перекрывающие функции из производного.
