C#.Полиморфизм.Перегрузка операций и методов.

Перегруженными наз-ся два и более метода с одинаковым именем,но с разл.списками аргументов.Перегрузка.Часто бывает,что вып-ся одно и тоже действие(метод),но с разн. типами аргументов или их кол-вом.В нек.языках программ-я,чтобы решить дан.проблему приходилось описать все методы с новыми именами,в С# для этого есть перегрузка. Перегрузка операторов тесно связана с перегрузкой методов. Для перегрузки операторов исп-ся ключ.слово operator, позволяющее создать операторный метод,кот.опр-т действие оператора,связанное с его классом.Сущ-т 2 формы методов operator:одна исп-ся для унарных операторов,а другая-для бинарных.Общий же формат таков:

Здесь эл-т ор- это оператор(например "+" или "/"),кот. перегружается.Эл-т тип_возврата-это тип зн-я, возвращ-го при вып-ии зад.операции.Несмотря на то, что можно выбрать любой тип,тип возвращ-го зн-я чаще всего будет совпадать с типом класса,для кот.этот оператор перегружается.Такая корреляция облегчает исп-е перегр. оператора в выр-ях.Для унарных операторов операнд передается в эл-те операнд,а для бинарных-в эл-тах операнд1 и операнд2.Для унарных операторов тип операнда должен совпадать с классом,для кот.определен оператор.Что касается бинарных операторов, то тип хотя бы одного операнда должен совпадать с соответств-им классом.Таким образом,С#-операторы нельзя перегружать для классов, не созданных вами.Например,вы не можете перегрузить оператор "+" для типов int или string.

И последнее: параметры операторов не должны исп-ть модификатор ref или out.


14. C#.Наследование.Ограничения при наследовании.

Важнейшим св-вом ООП явл-ся наследование.Для того, чтобы показать,что класс В наследует класс A (класс B выведен из класса A),в опр-ии класса B после имени класса ставится двоеточие и затем перечисляются классы,из кот.B наследует:class<производный_класс>:<базовый_класс>

class A

{public:

A();

~A();

MethodA();};

class B : public A

{public:

B();

. . .};

Термин "наследование" озн-т,что класс B обладает всеми св-вами класса A,он их унаследовал.У объекта производного класса есть все атрибуты и методы баз.класса. Новый класс может добавить собств.атрибуты и методы.Ключ.слово public перед именем баз.класса опр-т,что внеш.интерфейс баз.класса стан-ся внеш.интерфейсом порожденного класса. Это наиболее употребляемый тип наследования.С# не поддерживает множественное наследование.Но можно объединять хар-ки поведения нескольких программных сущностей,реализовав несколько интерфейсов.Интерфейсы, выбранные для реал-ции,перечисляются после баз.класса дан.класса.Пример:класс MyClass происх-т от Control и реализует интерфейсы Foo к Bar:

class Control
{ }
interface IFoo
interface IBar
{ }
class MyClass:Control,IFoo,IBar
{ }
Главное здесь то,что единств.способом реал-ции чего-либо, напоминающего множественное наследование,на С# явл-ся прим-е интерфейсов.