先决条件: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)构造函数中存在的参数的数量和类型相同。