Nieznana konstrukcja jezyka: public Department(string name) : this()

0
public Department(string name) : this()
3

To jest konstruktor, który wywoła najpierw konstruktor bezparametrowy swojej klasy.

1

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?

0

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

0

@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;
  }
0

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();
    }
} 
1

@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.

1 użytkowników online, w tym zalogowanych: 0, gości: 1