Privatne (sukromne) konstruktory v jazyku C#

Programovacie jazyky, rady, poradňa...
MarkMarusin
Medium Expert
Medium Expert
Používateľov profilový obrázok
Príspevky: 135
Registrovaný: 30 apr 2011, 13:42

Privatne (sukromne) konstruktory v jazyku C#

Príspevok od používateľa MarkMarusin »

Maju privatne konstruktory nejaky vyznam?? prikladam priklad:

Kód: Vybrať všetko

class Kruh
{
   private int polomer;
   private Kruh()
   {
        polomer = 0;
   }
   public double Plocha()
   {
        return Math.PI * polomer * polomer;
   }
}
v tomto kode je konstruktor oznaceny ako sukromny "private", to znamena ze nema pristup mimo danu triedu , ale docital som sa ze privatne konstruktory maju nejaky vyznam , aky vyznam maju ? som sa uz nedocital
manager666
Star
Star
Používateľov profilový obrázok
Príspevky: 642
Registrovaný: 12 aug 2007, 13:29

Re: Privatne (sukromne) konstruktory v jazyku C#

Príspevok od používateľa manager666 »

Kde si take nieco cital ?
Uz len keby si si ten svoj kod realne vyskusal, dostal by si pri vytvarani instancie nasledovnu chybovu hlasku:
'Kruh()' is inaccessible due to its protection level...
Z tohto kontextu je jasne, ze privatny konstruktor byt nemoze v instanciancnych triedach, pretoze by nebol dosiahnutelny pri vytvarani instancie... Konstruktor je vzdy v tomto pripade verejny. :roll:

Privatny konstruktor je zvycajne vyuzivany u tried, ktore obsahuju iba staticke cleny. V tomto pripade sluzia pre zabranenie vytvorenia instancie triedy. No ale stoji za to, pouvazovat nad tym, ci nie je vhodnejsie vytvorit komplet staticku triedu... Viac na msdn.
Pjotrik =)
Light Expert
Light Expert
Príspevky: 47
Registrovaný: 18 sep 2005, 15:22
Kontaktovať používateľa:

Re: Privatne (sukromne) konstruktory v jazyku C#

Príspevok od používateľa Pjotrik =) »

Privatny konstruktor je dobry vtedy, ked sa chceme postarat, aby existovala prave jedna instancia danej triedy. Jedna sa o navrhovy vzor Singleton. Ine vyuzitie nepoznam.

Priklad z wikipedie:

Kód: Vybrať všetko

class Singleton { 
 
    private static Singleton instance;
 
    //Privatni konstruktor
    private Singleton() { }
 
    //Staticka property (vlastnost) zajistujici vytvoreni instance
    public static Singleton Instance {
        get {
            //Jeli je promenna instance null, tak se vytvori objekt
            if (instance == null) {
                instance = new Singleton();
            }
            //Vratime jedinacka
            return instance;
        }
    }
}
 
class Program {
    //Pouziti
    public static void Main() {
        Singleton s = Singleton.Instance;
    }
}
Napísať odpoveď