public Department(string name) : this()
To jest konstruktor, który wywoła najpierw konstruktor bezparametrowy swojej klasy.
Czyli jeśli dobrze zrozumiałem to z:
class E
{
string x,y;
public E() {}
public E(string x) :this()
{
this.x = x;
]
}
Wpierw wywoływany jest konstruktor bezparametrów i do x,y wpisuje "" a potem wykonywany jest kod bloku konstruktora ze stringiem?
A co to gdyby było bez tego :this() to konstruktor z parametrem nie wypełnił by zmiennych ich domyślnymi wartościami?
ace4ur zobacz ten przykład
//przykład użycia inicjalizatora this
class Class
{
int value;
string name;
public Class()
:this(0)
{
}
public Class(int value)
:this(value, "default")
{
}
public Class(int value, string name)
{
this.value = value;
this.name = name;
}
}
jeśli dobrze rozumuję to widać tu kaskadowe wywołanie.
A tu jest czarna magia:
// Przykład użycia inicjalizatora base
class Class1
{
protected int value;
public Class1(int value)
{
this.value = value;
}
}
class Class2 : Class1
{
int value2;
public Class2(int value, int value2)
: base(value)
{
this.value2 = value2;
}
}
Może ktoś wytłumaczyć ten niższy przykład?
Żródło: http://4programmers.net/C_sharp/Konstruktory_i_Destruktory
@ace4ur jakimi znów domyślnymi wartościami?
class E
{
string x,y;
public E() {
//tutaj fragment kodu który chcemy wykonać zawsze przy tworzeniu takiego obiektu
}
public E(string x) :this() {
this.x = x;
}
Jak to jakimi Shalom?
Może źle to nazwałem. Chodzi mi o:
using System;
class App
{
int x;
string xx;
public App() { }
public App(string xx, int x)
{
this.x = x;
this.xx = xx;
}
public string S()
{
return string.Format("X: {0},XX: {1}", x, xx);
}
}
class Apps
{
static void Main()
{
App One = new App();
App Two = new App("ee", 5);
Console.WriteLine("{0}\n{1}", One.S(), Two.S()); // { One - x = 0, xx = "" , Two - x = 5, xx == "ee" }
Console.ReadLine();
}
}
@ace4ur: domyślnymi wartościami nie wypełnia żaden konstruktor, po prostu pola klasy jeżeli jawnie inaczej ich nie zainicjalizujesz to przyjmują wartości domyślne: 0 dla liczb, null dla referencji.
@maszynaz: ... : base(...) powoduje wywołanie wybranego konstruktora klasy bazowej, jeżeli jawnie nie wyspecyfikujemy jaki konstruktor ma się odpalić to odpali się bezparametrowy. Jeżeli nie będzie bezparametrowego to dostaniemy błąd kompilacji.