Конструктор класса C#

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

Конструктор класса вызывается с помощью ключевого слова new. Имя конструктора должно совпадать с именем класса. Конструктор, как и обычные методы класса, может принимать параметры или быть без параметров. В классе могут быть несколько конструкторов. Если в классе определяются несколько конструкторов, они должны отличаться по числу параметров.

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

В общем виде объявление конструктора выглядит так:

class Имя_Класса {
    Модификатор_Доступа Имя_Класса() { }
}

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

class Sample {
    private int _sampleVariable;

    // Конструктор без параметров
    public Sample() {
        _sampleVariable = -1;
    }

    // Конструктор с одним параметром
    public Sample( int sampleVariable ) {
        _sampleVariable = sampleVariable;
    }
}

Порядок вызова конструкторов при наследовании

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

class A {
    public A() {
        Console.WriteLine( "Вызов конструктора класса A" );
    }
}

class B : A {
    public B() {
        Console.WriteLine( "Вызов конструктора класса B" );
    }
}

class C : B {
    public C() {
        Console.WriteLine( "Вызов конструктора класса C" );
    }
}

public class Person {
    static void main() {
        C c = new C();
    }
}

// Вывод:
// Вызов конструктора класса A
// Вызов конструктора класса B
// Вызов конструктора класса C

Вызов конструктора базового класса

Иногда может потребоваться явный вызов конструктора базового класса. Например, если в базовом классе есть несколько конструкторов, и требуется вызвать какой то конкретный. Для вызова конструктора базового класса применяется ключевое слово base.

Пример вызова конструктора базового класса:

class Point {
    public int X { get; set; }
    public int Y { get; set; }

    public Point() { }
    public Point( int x, int y ) {
        X = x;
        Y = y;
    }
}

class Point3D : Point {
    public int Z { get; set; }

    public Point3D() { }
    public Point3D( int x, int y, int z )
        : Point( x, y ) // Вызов конструктора базового класса
    {
        Z = z;
    }
}

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

Вызов конструктора из другого конструктора в том же классе возможен при использовании ключевого слова this.

class Sample {
    private int _sampleVariable;
    private int _anotherVariable;

    public Sample( int sampleVariable ) {
        _sampleVariable = sampleVariable;
    }

    public Sample( int sampleVariable, int anotherVariable ) 
        : this ( sampleVariable ) // Вызов конструктора Sample( int )
    {
        _anotherVariable = anotherVariable;
    }
}

Модификаторы доступа применяемые к конструкторам

К конструкторам классов в C# могут применяться все модификаторы доступа, которые могут применяться к членам класса – это public, private, protected, internal, protected internal. Однако если объявить конструктор класса с модификатором доступа private, то экземпляры такого класса нельзя будет создать.

avatar
5000
  Подписаться  
Уведомление о