| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Общие вопросы по .NET и C# > Вопрос? Перегрузка операторов в C# |
| Автор: Neuromancer 29.8.2006, 15:27 |
| Читаю книгу “Шилдт Полный справочник по С#” У меня вопрос? Я не хрена не понял, что там Шилдт наколбасил про перегрузки операторов, мог бы кто нибуть объяснить поподробней, кое-что, конечно, понял, но не все. И если можно, то приведите пример с комментариями или ссылку дайте, где можно прочитать, чтоб там все понятно расписано было и cпримерами. |
| Автор: marcusmae 29.8.2006, 16:04 |
| Ссылок http://www.google.com/search?client=opera&rls=ru&q=c%23+operator+overloading&sourceid=opera&ie=utf-8&oe=utf-8. А вообще, вряд ли сильно много умеющих объяснить лучше Шилдта. То есть, имеет смысл задать более конкретные вопросы о том, что непонятно. Мы попробуем ответить ;) |
| Автор: reloni 29.8.2006, 18:24 | ||||
Это точно Но вот пример, практически под копирку списанный у Троелсена, может он поможет:
Перегрузки "+" и "-" вызывают соответственно методы Add и Sub, в принципе можно и не плодить дополнительных методов. Эти метды возвращают новый класс, с измененными координатами. Теперь можно написать:
|
| Автор: marcusmae 29.8.2006, 18:53 | ||||||
override потому что подразумевается переопределение метода, унаследованного классом Point от System.Object :
который определяет методы GetType(), ToString(), Equal(), GetHashCode() и др. :
и ещё, функции перегрузки операторов всегда статические (static). То есть, общие для всех экземпляров класса Point. |
| Автор: ivashkanet 30.8.2006, 09:47 | ||||||||
| reloni, попробую я немного объяснить На примере операции "+". Этот символ обозначает разные операции. Например 1+1 --- опирация сложения чисел (ответ 2) А если "1" -- строка, то + будет складывать именно строки, а не их значения. Алгоритм этого действия другой и в ответе уже будет "11" -- склейка этих строк. Получается, что результат одной и той же операции зависит от того что мы складываем (это естественно). По умолчанию, язык C# не в курсе как складываются точки (Point). Поэтому его нужно этому учить:
Внутри ты можешь поставить любую реализацию (даже попарно умножить их). Мы только что научили C# складывать Точки. Можно научить умножать Точку на число:
Можно эту же операцию применить к скалярному умножению точек:
И так далее.... В последних двух примерах мы и сталкиваемся с перегрузкой. Т.е. Когда один и тот же оператор (*) имеет разные реализации (но!, что важно для разных аргументов). Как же компилятор определяет какую реализацию выбрать? Очень просто: Если ты перемножаешь число и Точку (именно в этом порядке
|
| Автор: Neuromancer 30.8.2006, 11:48 |
| ivashkanet- Спасибо тебе огромное вот люди учитесь, как надо объяснять. |
| Автор: ivashkanet 30.8.2006, 11:50 |
| Neuromancer, не за что |
| Автор: VisualProgrammerNET 30.8.2006, 14:56 | ||
Никогда не любил заморачиваться с этими операторами... проще написать один метод типа
|
| Автор: reloni 30.8.2006, 15:08 | ||
VisualProgrammerNET, ингда бывает проще написать
Чем вызывать каждый раз статический метод. Особенно если это надо делать часто. |
| Автор: $tatic 2.9.2006, 13:56 |
| Для векторов и матриц к тому же полезно. Хотя для векторов и существует два типа умножения. |