📜  在C#中使用此关键字调用重载的构造函数

📅  最后修改于: 2021-05-29 23:25:17             🧑  作者: Mango

先决条件:C#中的构造方法

C#提供了一个功能强大的关键字,称为this关键字,此关键字具有许多用法。在这里,我们使用此关键字从另一个构造函数调用重载的构造函数。

重要事项:

  • 当您使用此关键字调用构造函数时,该构造函数应属于同一类。
  • 您也可以在此关键字中传递参数。
  • 此关键字始终指向使用该关键字的同一类的成员。
  • 使用此关键字时,它告诉编译器调用默认构造函数。换句话说,这意味着不包含参数的构造函数。

    句法:

    class X 
    {
    
       public X: this()
       {
    
          // Code..
    
       }
    }
    
  • 关键字包含与调用构造函数中相同的类型和相同数量的参数。

    句法:

    class X
    {
       public X(int x): this(int)
       {
    
           // Code..
       }
    }
    
  • 此概念消除了同一类中属性复制的分配。

下面的程序说明了如何使用此关键字调用重载的构造函数:

范例1:

// C# program to illustrate how to invoke
// overloaded constructor using this keyword
using System;
class Geek {
  
    // Constructor without parameter
    public Geek()
    {
        Console.WriteLine("Hello! Constructor 1");
    }
  
    // Constructor with parameter
    // Here this keyword is used 
    // to call Geek constructor
    public Geek(int a) 
    : this()
    {
        Console.WriteLine("Hello! Constructor 2");
    }
}
  
// Driver Class
public class GFG {
  
    // Main method
    static public void Main()
    {
  
        // Create oject of Geek class
        Geek obj = new Geek(2);
    }
}

输出:

Hello! Constructor 1
Hello! Constructor 2

说明:在上面的示例中, Geek类包含两个构造函数,即Geek()不带参数,而Geek(int a)不带参数。现在,我们使用this()关键字在Geek(int a)中调用Geek()构造函数。这里的this()关键字不包含任何参数,因为构造函数不包含任何参数。

范例2:

// C# program to illustrate how to invoke
// overloaded constructor using this keyword
using System;
class Geek {
  
    // Constructor with parameters
    public Geek(int a, double b, string c)
    {
        Console.WriteLine(a);
        Console.WriteLine(b);
        Console.WriteLine(c);
    }
  
    // Constructor with parameters
    // Here this keyword is used 
    // to call Geek constructor
    public Geek(int a, int b)
        : this(50, 2.9, "Hello")
    {
        Console.WriteLine(a);
        Console.WriteLine(b);
    }
}
  
// Driver Class
public class GFG {
  
    // Main method
    static public void Main()
    {
  
        // Create oject of Geek class
        Geek obj = new Geek(15, 30);
    }
}

输出:

50
2.9
Hello
15
30

说明:在上面的示例中, Geek类包含两个构造函数,即Geek(int a, double b, string c)Geek(int a, int b) ,两者都是参数化构造函数。现在,我们使用this(50, 2.9, "Hello")关键字在Geek(int a, int b)调用Geek(int a, double b, string c)构造函数。这里的this(50, 2.9, "Hello")关键字包含与Geek(int a,double b, 字符串 c)构造函数中存在的参数的数量和类型相同。