C# this

时间:2024-03-31 15:26:19

      • 解决变量名冲突:
      • 作为方法的第一个参数:
      • 链式调用:
      • 构造函数中:
      • 请注意,

C#中, this是一个关键字,它指代当前类的实例。当你在类的成员方法或属性中使用 this时,你实际上是在引用当前类的当前实例。 this通常用于以下情况:

解决变量名冲突:

当类的成员变量和方法的局部变量具有相同的名称时,可以使用this来区分它们。

public class MyClass  
{  
    private int myVariable = 0;  
  
    public void MyMethod(int myVariable)  
    {  
        // 使用 this 来引用类的成员变量  
        this.myVariable = myVariable;  
    }  
}

作为方法的第一个参数:

C#中,类的非静态方法实际上是隐式地接收一个名为this的参数,这个参数是类的当前实例。虽然通常不需要显式使用它,但在某些情况下,如扩展方法或委托中,你可能会看到它的使用。

链式调用:

在类的某些方法中返回this,可以实现链式调用。这在构建器模式或配置类的上下文中特别有用。

简言之,类似cin cout<<的重载返回iostream一样能一直调用,这样不用打很多次cin啥的

public class Builder  
{  
    public Builder SetOptionA(string value)  
    {  
        // 设置选项A的值  
        return this; // 返回当前实例,以便链式调用  
    }  
  
    public Builder SetOptionB(int value)  
    {  
        // 设置选项B的值  
        return this; // 返回当前实例,以便链式调用  
    }  
  
    public void Build()  
    {  
        // 构建对象  
    }  
}  
  
// 使用链式调用  
var builder = new Builder();  
builder.SetOptionA("someValue").SetOptionB(42).Build();

构造函数中:

在构造函数中,this也可以用于调用其他构造函数(称为构造函数链)。

public class MyClass  
{  
    public MyClass() : this(1) // 调用带有单个参数的构造函数  
    {  
        // 额外的初始化代码(如果有的话)  
    }  
  
    public MyClass(int value)  
    {  
        // 初始化代码  
    }  
}

下面这个例子更好

public class Person  
{  
    private string name;  
    private int age;  
  
    public Person(string name)  
        : this(name, 0) // 调用下面的构造函数,并传递name和0作为参数  
    {  
    }  
  
    public Person(string name, int age)  
    {  
        this.name = name;  
        this.age = age;  
    }  
}

在上面的例子中,Person(string name)构造函数通过this(name, 0)调用了Person(string name, int age)构造函数。

请注意,

在大多数情况下,你不需要显式使用this,因为编译器可以自动解析当前实例的成员。但是,在某些情况下,使用this可以使代码更加清晰或解决命名冲突。