Промышленное производство
Промышленный Интернет вещей | Промышленные материалы | Техническое обслуживание и ремонт оборудования | Промышленное программирование |
home  MfgRobots >> Промышленное производство >  >> Industrial programming >> Язык C

Ключевое слово this в C#: разбор всех сценариев использования

Освоение ключевого слова this в C#

Изучите универсальное ключевое слово this в C# через краткие объяснения и реальные примеры кода.

В C# this ссылается на текущий экземпляр класса. Оно незаменимо для различения полей экземпляра и параметров методов, вызова перегруженных конструкторов, передачи текущего объекта другим методам и объявления индексаторов.

using System;
namespace ThisKeyword {
    class Test {
        int num;
        Test(int num) {
            // this.num ссылается на поле экземпляра
            this.num = num;
            Console.WriteLine("object of this: " + this);
        }
        static void Main(string[] args) {
            Test t1 = new Test(4);
            Console.WriteLine("object of t1: " + t1);
            Console.ReadLine();
        }
    }
}

Вывод

object of this: ThisKeyword.Test
object of t1: ThisKeyword.Test

И t1, и this ссылаются на один экземпляр; их строковые представления совпадают.


Разрешение конфликта имен

Поля экземпляра и параметры могут иметь одинаковое имя, но без this компилятор считает ссылку параметром, оставляя поле нетронутым.

using System;
namespace ThisKeyword {
    class Test {
        int num;
        Test(int num) {
            num = num; // присваивает параметр самому себе, поле остается 0
        }
        static void Main(string[] args) {
            Test t1 = new Test(4);
            Console.WriteLine("value of num: " + t1.num);
            Console.ReadLine();
        }
    }
}

Вывод

0

Результат 0, так как присваивание не затрагивает поле. Использование this снимает неопределенность:

using System;
namespace ThisKeyword {
    class Test {
        int num;
        Test(int num) {
            // this.num ссылается на поле экземпляра
            this.num = num;
        }
        static void Main(string[] args) {
            Test t1 = new Test(4);
            Console.WriteLine("value of num: " + t1.num);
            Console.ReadLine();
        }
    }
}

Вывод

value of num: 4

Цепочка конструкторов с this

Когда класс предлагает несколько конструкторов, один может вызывать другой для централизации логики инициализации. Это делается ключевым словом this после двоеточия в сигнатуре конструктора.

using System;
namespace ThisKeyword {
    class Test {
        Test(int num1, int num2) {
            Console.WriteLine("Constructor with two parameters");
        }
        // вызывает двухпараметровый конструктор
        Test(int num) : this(33, 22) {
            Console.WriteLine("Constructor with one parameter");
        }
        public static void Main(string[] args) {
            Test t1 = new Test(11);
            Console.ReadLine();
        }
    }
}

Вывод

Constructor with two parameters
Constructor with one parameter

Однопарамтерный конструктор сначала выполняет двухпараметровый, затем продолжает свое тело. Этот паттерн, называемый цепочкой конструкторов (constructor chaining), сохраняет логику инициализации DRY.


Передача текущего экземпляра в методы

Иногда методу нужно оперировать объектом, который его вызвал. Использование this как аргумента делает намерение явным.

using System;
namespace ThisKeyword {
    class Test {
        int num1;
        int num2;
        Test() {
            num1 = 22;
            num2 = 33;
        }
        // метод, принимающий экземпляр Test
        void PassParameter(Test t) {
            Console.WriteLine("num1: " + t.num1);
            Console.WriteLine("num2: " + t.num2);
        }
        void Display() {
            // передача текущего экземпляра
            PassParameter(this);
        }
        public static void Main(string[] args) {
            Test t1 = new Test();
            t1.Display();
            Console.ReadLine();
        }
    }
}

Вывод

num1: 22
num2: 33

Так как this представляет вызывающий экземпляр, метод может безопасно обращаться к его приватным полям.


Объявление индексатора с this

Индексаторы позволяют обращаться к объектам как к массивам. Ключевое слово this объявляет сигнатуру индексатора.

using System;
namespace ThisKeyword {
    class Student {
        private string[] names = new string[3];
        // Объявление индексатора
        public string this[int index] {
            get { return names[index]; }
            set { names[index] = value; }
        }
    }
    class Program {
        public static void Main() {
            Student s = new Student();
            s[0] = "Ram";
            s[1] = "Shyam";
            s[2] = "Gopal";
            for (int i = 0; i < 3; i++) {
                Console.WriteLine(s[i]);
            }
        }
    }
}

Вывод

Ram
Shyam
Gopal

Приватный массив names доступен через индексатор, сохраняя инкапсуляцию и предлагая массивоподобный синтаксис.

Для глубокого погружения в индексаторы см. официальную документацию Microsoft: C# Indexer.

Язык C

  1. Ключевое слово static в C#: статические переменные, методы и классы
  2. Ключевое слово global в Python: как и когда использовать
  3. Ключевое слово this в Java: практическое применение, конструкторы и примеры
  4. Ключевое слово final в Java: переменные, методы и классы
  5. Тестирование датчика температуры DS18B20 на Raspberry Pi
  6. Coded UI Test: комплексное руководство для начинающих по фреймворку автоматизации
  7. Turck TB3-CP80: Точный тест-бокс для индуктивных, магнитных, емкостных и фотоэлектрических датчиков
  8. Магнитный тестовый щуп Pomona MP1 — 4 мм защитная гнездо, угловой, для точной промышленной диагностики
  9. Быстрый смартфон-тест COVID-19 дает результаты с высокой точностью за 10 минут
  10. Летающий зонд (FPT): профессиональное руководство по надежной верификации функциональности печатных плат