Отправляет email-рассылки с помощью сервиса Sendsay

Финансы. Инструкция

  Все выпуски  

Уроки по C# и .NET.


Информационный Канал Subscribe.Ru

C# и .NET. Уроки с сайта http://progs.biz

Рассылка №7

Основы C#. Урок 16. Перегрузка унарных операторов.
Основы C#. Урок 17. Область видимости.

Полные версии уроков (с картинками) можно найти по адресам
Урок 16. Перегрузка унарных операторов.
Урок 17. Область видимости.

Основы C#. Урок 16. Перегрузка унарных операторов

Унарные операторы - это те, которые имеют только один операнд (параметр). Типичные примеры унарных операторов - это унарный минус (меняющий знак на противоположный) и оператор инкремента ++.

Рассмотрим перегрузку унарных операторов на примере рассмотренного на прошлом уроке класса Vector. А именно, добавим в наш класс унарный минус, который будет менять вектор с координатами x и y на вектор с координатами -x и -y. Для этого добавьте в наш класс Vector следующие строки:

        public static Vector operator -(Vector v)
        {
            Vector res = new Vector(-v.x, -v.y);
            return res;
        }

Обратите внимание, что при перегрезке унарных операторов (как, впрочем, и преперегрузке бинарных), мы должны поставить модификатор static.

Для испытания перегруженного оператора изменить класс Test приблизительно следующим образом:

    class Test
    {
        static void Main(string[] args)
        {
            Vector a=new Vector(1, 2), b;
            b = -a;
            Console.WriteLine("x=" + b.GetX() + ", "
                + "y=" + b.GetY());
        }
    }

Как и следовало ожидать, результатом выполнения программы будет вывод на экран строки "x=-1, y=-2".

Не надо думать, что при перегрузке операторов тип возвращаемого значения всегда совпадает с типом класса (для которого происходит перегрузка). Это зависит от конкретной задачи. Вот пример перегрузки оператора !, который возвратит модуль вектора:

        public static double operator !(Vector v)
        {
            double res = Math.Sqrt(v.x*v.x + v.y*v.y);
            return res;
        }

Здесь мы воспользовались методом Sqrt класса Math для возврата квадратного корня. Sqrt - это статический метод класса Math, поэтому мы вызываем его не для конкретного экземпляра класса, а для самого класса. О статических методах мы поговорим позже, пока же измените тестовый класс Test следующим образом:

    class Test
    {
        static void Main(string[] args)
        {
            Vector a=new Vector(3, 4);
            Console.WriteLine(!a);
        }
    }

Наша программа должны вывести 5 (длину вектора (3, 4)).

Наверх

Основы C#. Урок 17. Область видимости

Переменные существуют только в своей области видимости, при выходе из которой переменная "умирает". Область видимости переменной в первом приближении начинается в строке, где переменная объявлена и кончается на закрывающей фигурной скобке (переменная должна быть объявлена между этой скобкой и парной к ней открывающей). Вот поясняющий пример:

            int k=3;
            //Все OK, переменая k видна
            Console.WriteLine(k);

Тут значение переменной k доступно и выведется на экран.

        ...
        {
            int k=3;
        }
            //Переменая k не видна
            Console.WriteLine(k); //Ошибка!

В этом же примере вывести k на экран не получится - она умерла на закрывающей фигурной скобке.

Во вложенных областях видимости мы, как правило, не можем объявлять переменные с одинаковыми именами:

            int k=4;
        {
            //Ошибка!
            int k=3;
        }

Исключение составляют параметры в методах класса:

    class Vector
    {
    float x, y; //Координаты
        ...
        public Vector(float x, float y)
        {
            this.x=x;
            this.y=y;
        }

Здесь мы имеем две пары одноименных переменных - x в параметре конструктора и x как переменная класса. Так как для уточнения переменной класса мы можем использовать this, то ошибки не будет.

Наверх

Рассылки сайта progs.biz:

Рассылки Subscribe.Ru
Обзор книг по программированию

Обзор новых книг по программированию. Включает книги как по традиционному программированию (Visual C++, Delphi, Visual Basic, C#, Java,...), так и по WEB-программированию (JavaScript, PHP, ASP, ASP.NET, Perl,...). Кроме того, предполагается обзор книг по копьютерным сетям, безопасности, сертификации и др.


Copyright Алексеев Игорь, 2002

Copyright сайт progs.biz, 2002



http://subscribe.ru/
E-mail: ask@subscribe.ru
Отписаться
Убрать рекламу

В избранное