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

Конструкторы в C#: виды, примеры и продвинутые паттерны

Конструкторы в C#

Узнайте, как конструкторы инициализируют объекты в C#, охватывая все виды конструкторов, паттерны и лучшие практики.

В C# конструктор — специальный метод, автоматически вызываемый при создании нового экземпляра класса. В отличие от обычных методов, конструкторы:


Создание конструктора в C#

Определите конструктор внутри класса, используя имя класса:

class Car {
    // конструктор
    Car() {
        // код инициализации
    }
}

Здесь Car() — конструктор. Вызывается с ключевым словом new:

new Car();

Например:

Car car1 = new Car();

См. также: C# Class and Objects.


Виды конструкторов

Основные категории:


1. Безпараметрический конструктор

Конструктор без параметров называется безпараметрическим или конструктором по умолчанию. Пример:

using System;
namespace ConstructorDemo {
    class Car {
        // безпараметрический конструктор
        Car() {
            Console.WriteLine("Car Constructor");
        }
        static void Main(string[] args) {
            new Car();
            Console.ReadLine();
        }
    }
}

Вывод

Car Constructor

2. Параметрический конструктор

Конструкторы могут принимать аргументы для инициализации полей экземпляра:

using System;
namespace ConstructorDemo {
    class Car {
        string brand;
        int price;
        // параметрический конструктор
        Car(string theBrand, int thePrice) {
            brand = theBrand;
            price = thePrice;
        }
        static void Main(string[] args) {
            Car car1 = new Car("Bugatti", 50000);
            Console.WriteLine("Brand: " + car1.brand);
            Console.WriteLine("Price: " + car1.price);
            Console.ReadLine();
        }
    }
}

Вывод

Brand: Bugatti
Price: 50000

3. Конструктор по умолчанию (неявный)

Если вы не объявляете конструктор, компилятор предоставляет неявный безпараметрический конструктор, инициализирующий поля значениями по умолчанию. Пример:

using System;
namespace ConstructorDemo {
    class Program {
        int a;
        static void Main(string[] args) {
            Program p1 = new Program();
            Console.WriteLine("Default value of a: " + p1.a);
            Console.ReadLine();
        }
    }
}

Вывод

Default value of a: 0

Числовые поля по умолчанию 0, строки и объекты — null.


4. Конструктор копирования

Конструктор копирования создает новый экземпляр, копируя состояние другого объекта:

using System;
namespace ConstructorDemo {
    class Car {
        string brand;
        // основной конструктор
        Car(string theBrand) {
            brand = theBrand;
        }
        // конструктор копирования
        Car(Car c1) {
            brand = c1.brand;
        }
        static void Main(string[] args) {
            Car car1 = new Car("Bugatti");
            Console.WriteLine("Brand of car1: " + car1.brand);
            Car car2 = new Car(car1);
            Console.WriteLine("Brand of car2: " + car2.brand);
            Console.ReadLine();
        }
    }
}

Вывод

Brand of car1: Bugatti
Brand of car2: Bugatti

5. Приватный конструктор

Пометка конструктора private запрещает внешнее создание экземпляров, полезно для синглтонов или утилитарных классов.

Пример

using System;
namespace ConstructorDemo {
    class Car {
        private Car() {
            Console.WriteLine("Private Constructor");
        }
    }
    class CarDrive {
        static void Main(string[] args) {
            // Car car1 = new Car(); // ошибка компиляции
            Console.ReadLine();
        }
    }
}

Ошибка:

error CS0122: 'Car.Car()' is inaccessible due to its protection level

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


6. Статический конструктор

Статический конструктор выполняется один раз на тип, перед доступом к любому статическому или экземплярному члену. Не может быть вызван напрямую, не принимает параметров и не имеет модификаторов доступа.

using System;
namespace ConstructorDemo {
    class Car {
        static Car() {
            Console.WriteLine("Static Constructor");
        }
        Car() {
            Console.WriteLine("Default Constructor");
        }
        static void Main(string[] args) {
            Car car1 = new Car();
            Car car2 = new Car();
            Console.ReadLine();
        }
    }
}

Вывод

Static Constructor
Default Constructor
Default Constructor

Примечание: Только один статический конструктор на класс; не может иметь параметров или модификаторов доступа.


Перегрузка конструкторов в C#

Определите несколько конструкторов с разными списками параметров для гибкого создания объектов. Пример:

using System;
namespace ConstructorOverloadDemo {
    class Car {
        Car() {
            Console.WriteLine("Car constructor");
        }
        Car(string brand) {
            Console.WriteLine("Car constructor with one parameter");
            Console.WriteLine("Brand: " + brand);
        }
        static void Main(string[] args) {
            Car car = new Car();
            Console.WriteLine();
            Car car2 = new Car("Bugatti");
            Console.ReadLine();
        }
    }
}

Вывод

Car constructor
Car constructor with one parameter
Brand: Bugatti

Компилятор выбирает подходящий конструктор по количеству и типам аргументов. Подробнее см. C# Constructor Overloading.

Язык C

  1. Вложенные классы в C#: определение, использование и наследование
  2. Освоение перегрузки конструкторов в C#
  3. Понимание конструкторов в C++: конструкторы по умолчанию, параметризованные и копирования
  4. Освоение конструкторов Java: типы, использование и практические примеры
  5. Конструкторы в Java Enums: объяснение с практическим примером
  6. Охлаждающая жидкость двигателя: назначение, виды и обслуживание
  7. Конструкторы в Java: инициализация и лучшие практики
  8. Как количество цилиндров формирует характеристики современных двигателей
  9. Расширенная гарантия автомобиля: как она защищает и экономит деньги
  10. Частые причины течи масляного фильтра и как их устранить