Udostępnij za pośrednictwem


Za pomocą konstruktory (Podręcznik programowania C#)

Gdy klasy lub struct jest tworzony, jego konstruktora nosi nazwę.Konstruktory mają taką samą nazwę jak klasy lub struktury i inicjują zazwyczaj elementów członkowskich danych nowego obiektu.

W poniższym przykładzie klasę o nazwie Taxi jest zdefiniowany za pomocą prostego konstruktora.Ta klasa jest następnie uruchomiony z Nowy operatora.Taxi Konstruktor jest wywoływany przez new operatora bezpośrednio po pamięci zarezerwowanej dla nowego obiektu.

public class Taxi
{
    public bool isInitialized;
    public Taxi()
    {
        isInitialized = true;
    }
}

class TestTaxi
{
    static void Main()
    {
        Taxi t = new Taxi();
        Console.WriteLine(t.isInitialized);
    }
}

Konstruktor, który nie ma parametrów jest nazywany domyślnego konstruktora.Konstruktory domyślne są wywoływane w każdym przypadku, gdy obiekt zostanie uruchomiony przy użyciu new operatora i żadne argumenty są dostarczane do new.Aby uzyskać więcej informacji, zobacz Konstruktorów wystąpienia (Podręcznik programowania C#).

Chyba, że klasa jest statycznej, klasy bez konstruktory są podane publicznego konstruktora domyślnego przez kompilator C# w celu umożliwienia podczas tworzenia wystąpienia klasy.Aby uzyskać więcej informacji, zobacz Klasy statyczne i elementów klas statycznych (Podręcznik programowania C#).

Klasę można zapobiec uruchamianiu dokonując konstruktora prywatnych, następująco:

class NLog
{
    // Private Constructor:
    private NLog() { }

    public static double e = Math.E;  //2.71828...
}

Aby uzyskać więcej informacji, zobacz Prywatne konstruktory (C# Programming Guide).

Konstruktory struct typów przypominają konstruktorów klas, ale structs nie może zawierać jawne domyślnego konstruktora, ponieważ został dostarczony automatycznie przez kompilator.Ten konstruktor inicjuje każdego pola w struct do wartości domyślnych.Aby uzyskać więcej informacji, zobacz Tabela wartości domyślne (C# odniesienia).Jednak ten konstruktor domyślny jest wywoływany tylko, jeśli struct zostaje zainicjowana z new.Na przykład, w tym przykładzie użyto domyślnego konstruktora dla Int32, dzięki czemu masz pewność, że liczba całkowita jest inicjowany:

int i = new int();
Console.WriteLine(i);

Poniższy kod, jednak powoduje błąd kompilatora, ponieważ nie używa new, i dlatego próbuje użyć obiektu, który nie został zainicjowany:

int i;
Console.WriteLine(i);

Wyliczana na podstawie obiektów structs (w tym wszystkie wbudowane typy liczbowe) może być zainicjowana lub przypisana i następnie używane jak w poniższym przykładzie:

int a = 44;  // Initialize the value type...
int b;
b = 33;      // Or assign it before using it.
Console.WriteLine("{0}, {1}", a, b);

Więc wywoływania domyślnego konstruktora dla typu wartości nie jest wymagana.

Obie klasy i structs można zdefiniować konstruktorów elementów parametrów.Konstruktorów elementów parametrów musi zostać wywołana przez new instrukcji lub podstawowych instrukcji.Klasy i structs można również zdefiniować wielu konstruktorów, a żadna nie jest wymagany do zdefiniowania domyślnego konstruktora.Na przykład:

public class Employee
{
    public int salary;

    public Employee(int annualSalary)
    {
        salary = annualSalary;
    }

    public Employee(int weeklySalary, int numberOfWeeks)
    {
        salary = weeklySalary * numberOfWeeks;
    }
}

Tej klasy mogą być tworzone przy użyciu jednej z następujących instrukcji:

Employee e1 = new Employee(30000);
Employee e2 = new Employee(500, 52);

Można użyć konstruktora base słowo kluczowe, aby wywołać konstruktora klasy podstawowej.Na przykład:

public class Manager : Employee
{
    public Manager(int annualSalary)
        : base(annualSalary)
    {
        //Add further instructions here.
    }
}

W tym przykładzie konstruktora dla klasy podstawowej nazywa się przed wykonaniem blok dla konstruktora.base z lub bez parametrów można użyć słowa kluczowego.Żadnych parametrów do konstruktora mogą być używane jako parametry do base, lub jako część większego wyrażenia.Aby uzyskać więcej informacji, zobacz podstawy (C# odniesienia).

W klasie pochodnej, jeśli Konstruktor klas bazowych nie zostanie jawnie wywołana za pomocą base słowa kluczowego, Konstruktor domyślny, jeśli istnieje, jest nazywana niejawnie.Oznacza to, że następujące deklaracje Konstruktor oznaczają to samo:

public Manager(int initialdata)
{
    //Add further instructions here.
}
public Manager(int initialdata)
    : base()
{
    //Add further instructions here.
}

Przy klasy bazowej nie oferuje domyślnego konstruktora, odziedziczonej klasy należy jawnym wywołaniem konstruktora klasy podstawowej za pomocą base.

Konstruktor innego konstruktora w każdym obiekcie mogą być wywoływane za pomocą to słowa kluczowego.Jak base, this może być używany z lub bez parametrów, a wszystkie parametry w Konstruktorze są dostępne jako parametry do this, lub jako część większego wyrażenia.Na przykład drugi konstruktor w poprzednim przykładzie można zapisać przy użyciu this:

public Employee(int weeklySalary, int numberOfWeeks)
    : this(weeklySalary * numberOfWeeks)
{
}

Użycie this słowa kluczowego w poprzednim przykładzie powoduje, że ten konstruktor do wywołania:

public Employee(int annualSalary)
{
    salary = annualSalary;
}

Konstruktory może zostać oznaczony jako publicznych, prywatne, chronione, wewnętrzny, lub protectedinternal. Te modyfikatory dostępu definiują, jak użytkownicy klasy można utworzyć klasę.Aby uzyskać więcej informacji, zobacz Modyfikatorów dostępu.

Konstruktor może być zadeklarowana w statycznej za pomocą statycznej słowa kluczowego.Konstruktory statyczne są nazywane automatycznie, tuż przed żadnych statycznych pól są dostępne, a zazwyczaj są używane do inicjowania elementów klas statycznych.Aby uzyskać więcej informacji, zobacz Konstruktorów statycznych.

Specyfikacja języka C#

Aby uzyskać więcej informacji, zobacz Specyfikacja języka C#. Specyfikacja języka to najlepsze źródło informacji dotyczących składni i zastosowania języka C#.

Zobacz też

Informacje

Klasy i strukturach (Podręcznik programowania C#)

Konstruktory (Podręcznik programowania C#)

Destruktory (Podręcznik programowania C#)

Koncepcje

Podręcznik programowania C#