Dela via


Privata konstruktorer (C#-programmeringsguide)

En privat konstruktor är en speciell instanskonstruktor. Det används vanligtvis i klasser som endast innehåller statiska medlemmar. Om en klass har en eller flera privata konstruktorer och inga offentliga konstruktorer kan andra klasser (förutom kapslade klasser) inte skapa instanser av den här klassen. Till exempel:

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

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

Deklarationen av den tomma konstruktorn förhindrar automatisk generering av en parameterlös konstruktor. Observera att om du inte använder en åtkomstmodifierare med konstruktorn är den fortfarande privat som standard. Den privata modifieraren används dock vanligtvis uttryckligen för att klargöra att klassen inte kan instansieras.

Privata konstruktorer används för att förhindra att instanser av en klass skapas när det inte finns några instansfält eller metoder, till exempel Math klassen, eller när en metod anropas för att hämta en instans av en klass. Om alla metoder i klassen är statiska kan du överväga att göra den fullständiga klassen statisk. Mer information finns i Statiska klasser och Statiska klassmedlemmar.

Exempel

Följande är ett exempel på en klass som använder en privat konstruktor.

public class Counter
{
    private Counter() { }

    public static int currentCount;

    public static int IncrementCount()
    {
        return ++currentCount;
    }
}

class TestCounter
{
    static void Main()
    {
        // If you uncomment the following statement, it will generate
        // an error because the constructor is inaccessible:
        // Counter aCounter = new Counter();   // Error

        Counter.currentCount = 100;
        Counter.IncrementCount();
        Console.WriteLine("New count: {0}", Counter.currentCount);

        // Keep the console window open in debug mode.
        Console.WriteLine("Press any key to exit.");
        Console.ReadKey();
    }
}
// Output: New count: 101

Observera att om du avkommentar följande instruktion från exemplet genereras ett fel eftersom konstruktorn inte är tillgänglig på grund av dess skyddsnivå:

// Counter aCounter = new Counter();   // Error

Se även