2012-02-14 17 views
11

Jak to możliwe, że klasa w języku C# może nie mieć zdefiniowanych konstruktorów? Na przykład mam klasyKlasa C# bez konstruktora

internal class TextStyle 
{ 
    internal string text = ""; 
    internal Font font = new Font("Arial", 8); 
    internal Color color = Color.Black; 
} 

I w kodzie tej klasy jest tworzony jako

TextStyle textParameters = new TextStyle(); 

Odpowiedz

31

Jeśli nie deklaruje żadnych konstruktorów dla klasy non-statycznych, kompilator dostarcza społeczeństwu (lub chronione dla klas abstrakcyjnych) konstruktor bez parametrów dla ciebie. Klasa skutecznie ma konstruktora:

public TextStyle() 
{ 
} 

Jest to opisane w punkcie 10.11.4 w C# 4 specyfikacji:

Jeśli klasa nie zawiera deklaracji instancji konstruktora domyślna instancja konstruktor jest automatycznie opatrzony. Ten domyślny konstruktor po prostu wywołuje konstruktor bezparametrowy bezpośredniej klasy bazowej. Jeśli bezpośrednia klasa bazowa nie ma dostępnego konstruktora instancji bez parametrów, wystąpi błąd podczas kompilacji. Jeśli klasa jest abstrakcyjna, deklarowana dostępność dla domyślnego konstruktora to protected. W przeciwnym razie deklarowana dostępność dla domyślnego konstruktora to public.

Jedyne zajęcia w języku C#, które nie mają dowolny instancji konstruktorów klas są statyczne, a oni nie może mieć konstruktorów.

0

Istnieje ciągły constrctor z implikacją, jeśli nie definiujesz innego konstruktora.

+3

-1; to skutecznie powtarza to, co napisał Jon Skeet 40 sekund wcześniej, ale z literówką, z mniejszą ilością szczegółów i bez autorytatywnego odniesienia. Ta odpowiedź nie dodaje żadnej wartości do strony. –

Powiązane problemy