Модификатор 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, т.е. функции родительского класса вызывают перекрывающие функции из производного.