Klasy statyczne i statyczni członkowie klas (Przewodnik programowania w języku C#)

A statyczne klasy jest zasadniczo taka sama, jak klasa-statycznej, ale istnieje jedna różnica: nie można utworzyć wystąpienia klasy statycznej.Innymi słowy, nie można użyć Nowy słowo kluczowe, aby utworzyć zmienną typu klasy.Ponieważ nie ma żadnych zmiennej instancji, członkowie klasy statyczne dostęp przy użyciu sama nazwa klasy.Na przykład, jeśli masz statycznych klasy, który jest o nazwie UtilityClass , ma publicznej metody, o nazwie MethodA, wywołanie metody, jak pokazano w następującym przykładzie:

UtilityClass.MethodA();

Klasy statyczne może służyć jako kontener wygodny dla zestawów metod, które po prostu działać na parametry wejściowe i nie trzeba pobrać lub ustawić wszystkie pola wewnętrznego instancji.Na przykład w.NET Framework Class Library statycznego Math klasa zawiera metody, które wykonują operacje matematyczne, bez jakiegokolwiek wymogu do przechowywania i pobierania danych, który jest unikatowy dla konkretnego wystąpienia Math klasy.Oznacza to, że możesz zastosować członkowie klasy określając nazwę klasy i nazwy metody, jak pokazano w poniższym przykładzie.

double dub = -3.14;
Console.WriteLine(Math.Abs(dub));
Console.WriteLine(Math.Floor(dub));
Console.WriteLine(Math.Round(Math.Abs(dub)));

// Output:
// 3.14
// -4
// 3

Jak w przypadku wszystkich typów klasy, informacje o typie dla klasy statyczne jest ładowany przez .NET Framework plików wykonywalnych języka wspólnego (CLR) jest ładowany program, który odwołuje się do tej klasy. Program nie można określić dokładnie, gdy klasa jest załadowana.Jednak jest zagwarantowane, być załadowane i jego pola zainicjowana i jego konstruktora statycznego wywoływana przed wykonaniem tej klasy jest wywoływany po raz pierwszy w programie.Konstruktora statycznego jest wywoływana tylko jeden raz i klasy statycznej pozostaje w pamięci dla okresu istnienia domeny aplikacji, w której znajduje się program.

[!UWAGA]

Aby utworzyć klasę-statycznej, która pozwala tylko jedno wystąpienie tego samego ma zostać utworzony, zobacz Wykonawczych Singleton w C#.

Poniższa lista zawiera główne cechy statyczne klasy:

  • Zawiera tylko elementy statyczne.

  • Nie można utworzyć wystąpienia.

  • Jest zapieczętowany.

  • Nie mogą zawierać Konstruktorów wystąpienia.

Tworzenie klasy statycznej dlatego jest zasadniczo taki sam, jak tworzenie klasy, który zawiera tylko elementy statyczne, jak i prywatnych konstruktora.Konstruktora prywatnej zapobiega uruchamianiu klasy.Zaletą używania statycznych klasy jest kompilator można sprawdzić upewnij się, że przypadkowo dodaje się nie elementów wystąpienia.Kompilator gwarantuje, że nie można utworzyć wystąpienia tej klasy.

Klasy statyczne są zamknięte i nie może być dziedziczona.Nie mogą dziedziczyć wszystkie klasy, z wyjątkiem Object.Klasy statyczne nie mogą zawierać konstruktora wystąpienia; może jednak zawierać konstruktora statycznego.Jeśli klasa zawiera elementy statyczne, wymagających-trivial inicjowania klasy niestatyczny również zdefiniować konstruktorze statycznym.Aby uzyskać więcej informacji, zobacz Konstruktory statyczne (Przewodnik programowania w języku C#).

Przykład

Oto przykład statyczne klasy, która zawiera dwie metody, które konwertują Temperatura Celsjusza do Fahrenheita i Fahrenheita do Celsjusza:

public static class TemperatureConverter
    {
        public static double CelsiusToFahrenheit(string temperatureCelsius)
        {
            // Convert argument to double for calculations. 
            double celsius = Double.Parse(temperatureCelsius);

            // Convert Celsius to Fahrenheit. 
            double fahrenheit = (celsius * 9 / 5) + 32;

            return fahrenheit;
        }

        public static double FahrenheitToCelsius(string temperatureFahrenheit)
        {
            // Convert argument to double for calculations. 
            double fahrenheit = Double.Parse(temperatureFahrenheit);

            // Convert Fahrenheit to Celsius. 
            double celsius = (fahrenheit - 32) * 5 / 9;

            return celsius;
        }
    }

    class TestTemperatureConverter
    {
        static void Main()
        {
            Console.WriteLine("Please select the convertor direction");
            Console.WriteLine("1. From Celsius to Fahrenheit.");
            Console.WriteLine("2. From Fahrenheit to Celsius.");
            Console.Write(":");

            string selection = Console.ReadLine();
            double F, C = 0;

            switch (selection)
            {
                case "1":
                    Console.Write("Please enter the Celsius temperature: ");
                    F = TemperatureConverter.CelsiusToFahrenheit(Console.ReadLine());
                    Console.WriteLine("Temperature in Fahrenheit: {0:F2}", F);
                    break;

                case "2":
                    Console.Write("Please enter the Fahrenheit temperature: ");
                    C = TemperatureConverter.FahrenheitToCelsius(Console.ReadLine());
                    Console.WriteLine("Temperature in Celsius: {0:F2}", C);
                    break;

                default:
                    Console.WriteLine("Please select a convertor.");
                    break;
            }

            // Keep the console window open in debug mode.
            Console.WriteLine("Press any key to exit.");
            Console.ReadKey();
        }
    }
    /* Example Output:
        Please select the convertor direction
        1. From Celsius to Fahrenheit.
        2. From Fahrenheit to Celsius.
        :2
        Please enter the Fahrenheit temperature: 20
        Temperature in Celsius: -6.67
        Press any key to exit.
     */

Elementy statyczne

Klasy statyczne nie mogą zawierać metody statyczne, pól, właściwości lub zdarzenia.Członka statycznego jest wpłacone na klasie, nawet wtedy, gdy utworzono nie instancji klasy.Nazwa klasy, a nie nazwy instancji jest zawsze uzyskać dostępu do członka statycznego.Istnieje tylko jedna kopia członka statycznego, niezależnie od tego, jak wiele wystąpień tej klasy są tworzone.Właściwości i metody statyczne nie może uzyskać dostępu do niestatycznego pola i zdarzeń w ich zawierające typu i nie można uzyskać dostępu zmiennej instancji, dowolny obiekt, chyba że wyraźnie przekazany parametr metody.

Jest bardziej typowe zadeklarować klasy niestatycznego z elementy statyczne, niż Aby zadeklarować całą grupę jako statyczny.Dwa typowe zastosowania statycznego pola są przechowuje licznika liczby obiektów, które zostały utworzone lub przechowywania wartości, które muszą być współużytkowane przez wszystkich wystąpień.

Metody statyczne mogą być przeciążone, ale nie pomijana, ponieważ należą do klasy, a nie do dowolnej instancji klasy.

Mimo, że pola nie można zadeklarować jako static const, const pole jest zasadniczo statyczne w jego zachowanie.Należy do typu, nie do wystąpień tego typu.W związku z tym, const pól jest możliwy przez przy zastosowaniu tej samej ClassName.MemberName notacji używany dla pól statycznego.Wystąpienie obiektu, nie jest wymagane.

C# nie obsługuje statyczne zmienne lokalne (zmienne, które są zadeklarowane w zakresie metody).

Deklarować elementów klas statycznych za pomocą static słowa kluczowego przed zwracany typ członka, jak pokazano w następującym przykładzie:

public class Automobile
{
    public static int NumberOfWheels = 4;
    public static int SizeOfGasTank
    {
        get
        {
            return 15;
        }
    }
    public static void Drive() { }
    public static event EventType RunOutOfGas;

    // Other non-static fields and properties...
}

Elementy statyczne są inicjowane, przed uzyskaniem dostępu do członka statycznego, po raz pierwszy i przed konstruktorze statycznym, jeśli istnieje, jest nazywany.Uzyskać dostęp do członka statycznego klasy, użyj nazwę klasy, zamiast nazwy zmiennej do określenia lokalizacji Państwa Członkowskiego, jak pokazano w następującym przykładzie:

Automobile.Drive();
int i = Automobile.NumberOfWheels;

Jeśli klasa zawiera statyczne pola, należy podać konstruktorze statycznym, który inicjuje je po załadowaniu klasy.

Wywołanie metody statycznej generuje instrukcji call w Microsoft intermediate language (MSIL), dlatego generuje wywołanie do metody wystąpienia callvirt instrukcji, która sprawdza również dla odwołania do obiektu null.Jednak w większości przypadków różnica wyników między dwoma nie ma znaczenia.

Specyfikacja języka C#

Aby uzyskać więcej informacji, zobacz Specyfikacja języka C#. Specyfikacja języka jest ostatecznym źródłem informacji o składni i użyciu języka C#.

Zobacz też

Informacje

static (odwołanie w C#)

Klasy (Przewodnik programowania w języku C#)

class (odwołanie w C#)

Konstruktory statyczne (Przewodnik programowania w języku C#)

Konstruktory wystąpień (Przewodnik programowania w języku C#)

Koncepcje

Przewodnik programowania w języku C#