Megosztás a következőn keresztül:


Privát konstruktorok (C# programozási útmutató)

A magánkonstruktor egy speciális példánykonstruktor. Általában csak statikus tagokat tartalmazó osztályokban használják. Ha egy osztály egy vagy több privát konstruktorsal rendelkezik, és nincsenek nyilvános konstruktorok, akkor más osztályok (a beágyazott osztályok kivételével) nem hozhatnak létre példányokat ennek az osztálynak. Példa:

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

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

Az üres konstruktor deklarációja megakadályozza a paraméter nélküli konstruktor automatikus létrehozását. Vegye figyelembe, hogy ha nem használ hozzáférési módosítót a konstruktorral, az alapértelmezés szerint privát marad. A privát módosító azonban általában kifejezetten arra szolgál, hogy egyértelmű legyen, hogy az osztály nem hozható létre.

A privát konstruktorok megakadályozzák az osztály példányainak létrehozását, ha nincsenek példánymezők vagy metódusok, például az Math osztály, vagy ha egy metódust meghívnak egy osztálypéldány beszerzésére. Ha az osztály összes metódusa statikus, fontolja meg a teljes osztály statikussá tételét. További információ: Statikus osztályok és statikus osztálytagok.

Példa

Az alábbi példa egy privát konstruktort használó osztályra mutat be példát.

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

Figyelje meg, hogy ha visszavonja a példában szereplő alábbi utasítást, hibát fog generálni, mert a konstruktor a védelmi szintje miatt nem érhető el:

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

Lásd még