2017-01-14 1 views
-3

Bitte erläutern Sie, was ": this()" sich bezieht.Kann ich stattdessen "base" verwenden. Wenn ich den Cursor auf "this" bewege, wird ein anderer Konstruktor angezeigt. Oder, wenn ich es durch "Basis" ersetze, gibt es diesen Fehler: "Objekt enthält keinen Konstruktor, der 1 Argument nimmt".Worauf bezieht sich "das" für jeden Konstruktor?

class Employee 
    { 
     private string name; 
     private string surname; 
     private DateTime birthday; 
     private double height; 
     private double salary; 
     public string Name { get { return name; } set { if (name != value) { name = value; } } } 
     public string Surname { get { return surname; } set { if (surname != value) { surname = value; } } } 
     public DateTime Birthday { get { return birthday; } set { if (birthday != value) { birthday = value; } } } 
     public double Height { get { return height; } set { if (height != value) { height = value; } } } 
     public double Salary { get { return salary; } set { if (salary != value) { salary = value; } } } 
     public string Full { get { return name + " " + surname; } } 
     public Employee() { 
      name = "Mina"; 
      surname = "Babayeva"; 
      birthday = DateTime.Now.AddYears(-19); 
      height=175; 
      salary = 3500; 
     } 

     public Employee(string name, string surname, DateTime birthday, double height, double salary) : this(name, surname) 
     { 
      this.birthday = birthday; 
      this.height = height; 
      this.salary = salary; 
     } 
     public Employee(string name) : this() 
     { 
      this.name = name; 
     } 
     public Employee(string name, string surname) : this(name) 
     { 
      this.surname = surname; 
     } 


     public void Print() 
     { 
      Console.WriteLine("Name is {0}\nSurname is {1}\nHeight is {2}\nBirthday is {3}\nSalary is {4}", 
       this.Name, this.Surname, this.Height, this.Birthday.ToString("dd/MM/yyyy"), this.Salary); 
     } 


//////////////////////////////// 
Employee a = new Employee(); 
      Employee b = new Employee("Adil", "Babayev"); 
      Employee c = new Employee("Zumrud","Babayeva",DateTime.Now.AddYears(-52),167,1000000); 
      Employee e = new Employee("Hanna"); 


      a.Print(); 
      Console.WriteLine(); 
      b.Print(); 
      Console.WriteLine(); 
      c.Print(); 
      Console.WriteLine(); 
      e.Print(); 
      Console.WriteLine(); 

Antwort

0

Immer, wenn Sie einen Konstruktor für eine Klasse erstellen, werden Sie tatsächlich eine Instanz als eine einzelne Kopie eines Objekts zu schaffen. Das Schlüsselwort this ist diese Instanz.

Beispiel Klasse von Apple: Orange {}

öffentlichen Apfel() : diese() {} Dies. ist eine Referenz auf die Instanz von Apple.

Wenn Sie die Basis für einen Klassenkonstruktor aufrufen, rufen Sie den abgeleiteten Klassenkonstruktor auf. Öffentlicher Apple() : base() {}

würde den Orange Class Constructor, nicht Äpfel zurückgeben! Riesiger Unterschied zwischen den beiden !!

Bitte schauen Sie in C# Konstruktor Chaining. MSDN hat großartige Beispiele und Dokumentationen in Bezug auf Ihre Suche.
Viel Glück mein Freund

Mit freundlichen Grüßen.

+1

Sie können Ihre Syntax und Formatierung in diesem Fall überprüfen. – Abion47

0

In diesem Zusammenhang bezieht sich this an den Konstruktor für die aktuelle Klasse. base verweist auf den Konstruktor für die Basis/geerbte Klasse. Also nein, sie sind nicht austauschbar.

Weitere Informationen: MSDN Using Constructors

Verwandte Themen