Widzę, że temat z przed 2 dni, ale nie jestem pewien czy kolega zrozumiał. Kod dla klasy Calendar wygląda prawdopodobnie tak:
public class Calendar
{
protected Calendar() { }
public static Calendar getInstance()
{
return new Calendar();
}
}
Jak widzisz konstruktor tej klasy jest protected
więc nie możesz stworzyć jej nowej instancji tą drogą (chyba, że wewnątrz tej klasy):
Calendar kalendarz = new Calendar();
Działania new
przypisane są do konstruktorów, spójrz
public class Car
{
protected Car() { }
protected Car(int liczba) { }
protected Car(string wyraz) { }
public Car(string wyraz, string drugiWyraz) { }
}
Car samochod = new Car() //ERROR
Car samochod = new Car(10) //ERROR
Car smaochod = new Car("cokolwiek") //ERROR
Car samochod = new Car("cokolwiek", "cokolwiek") //OK! bo tylko ten konstruktor jest publiczny
Konstruktor nie robi nic więcej jak zwraca nową instancję z tym co jej przypiszesz wewnątrz niego.
Generalnie tworzenie instancji obiektu przez new
jest przez wielu uważane za antywzorzec. Jakie to ma zastosowanie? np.
public class Car
{
public string Mark { get; protected set; }
protected Car(string mark)
{
Mark = mark;
}
public static Car CreateFerrari()
{
return new Car("Ferrari");
}
public static Car CreateMercedes()
{
return new Car("Mercedes");
}
public static Car CreateBMW()
{
return new Car("BMW");
}
}
Piszesz klasę takiego samochodu i nie chcesz dać jej użytkownikowi możliwości tworzenia samochodu marki 'samochód', no bo co to niby jest? W przyrodzie takie nie występują i lepiej żeby w twoim kodzie też nie wystepowały. Teraz ma możliwość stworzenia go (w aktualnej wersji) na trzy sposoby.
Car samochod = Car.CreateFerrari();
Car samochod = Car.CreateMercedes();
Car samochod = Car.CreateBMW();
Marka jest odgórnie przypisana do każdego - i o to chodzi! ^^
Pozdrawiam
Wesołych Świąt