C#中this的用法

本文详细介绍了C#中this关键字的使用方法,包括如何通过this.调用当前实例的成员,将其作为参数传递以及声明索引器。通过具体示例展示了this在不同构造函数中的应用。

在C#中,this关键字代表当前实例,我们可以用this.来调用当前实例的成员方法,变量,属性,字段等;
也可以用this来做为参数状当前实例做为参数传入方法.
还可以通过this[]来声明索引器
举例:

using System;
namespace CallConstructor
{ 
   public class Car 
 
{  
    int petalCount = 0;  
    String s = "null";    
    Car(int petals)  
      {     
       petalCount = petals;  
       Console.WriteLine("Constructor w/int arg only,petalCount = " + petalCount);
      }
        Car(String s, int petals)
        : this(petals)  
      {   
        this.s = s; 
        Console.WriteLine("String & int args"); 
      }   
     Car()     
       : this("hi", 47)  
      {        
    Console.WriteLine("default constructor");   
      }       
 public static void Main()  
      {     
       Car x = new Car();     
       Console.Read();   
      }  
  }
}


代码注释:

// 引入使命空间System
using System;  
// 声明命名空间CallConstructor
namespace CallConstructor 
{ 
// 声明类Car
public class Car
 { 
// 在Car类中:
// 声明一个非静态的整型变量petalCount,初始值为0
// 未用Static声明的变量叫做静态变量,非静态成员属于类的实例,我们只能在调用类的构造函数对类进行实例化后才能通过所得的实例加"."来访问
int petalCount = 0;
// 声明一个非静态的字符串变量s,初始值为"null";
// 注意:s = "null"与s = null是不同的
String s = "null";
// Car类的默认构造函数 
Car(int petals) 
{ 
// Car类的默认构造函数中为 petalCount 赋值为传入的参数petals的值
petalCount = petals;
 // 输出petalCount 
Console.WriteLine("Constructor w/int arg only,petalCount = " + petalCount);
 }
// 重载Car类的构造函数 
// : this(petals) 表示从当前类中调用petals变量的值来作为构造函数重载方法Car(String s, int petals)的第二个参数
Car(String s, int petals) 
: this(petals) 
{ 
// 在构造函数中为s赋值
// 非静态成员可以在构造函数或非静态方法中使用this.来调用或访问,也可以直接打变量的名字,因此这一句等效于s = s,但是这时你会发类的变

量s与传入的参数s同名,这里会造成二定义,所以要加个this.表示等号左边的s是当前类自己的变量
this.s = s;
Console.WriteLine("String & int args"); 
} 
// 重载构造函数,: this("hi", 47) 表示调Car(String s, int petals) 这个重载的构造函数,并直接传入变量"hi"和47
Car()
:this("hi", 47) 
{ 
Console.WriteLine("default constructor");
 }
 public static void Main() 
{ 
Car x = new Car(); 
Console.Read(); 
    } 
  } 
}


 

C#中,this关键字代指类的当前实例,其使用方法如下: ### 限定类似名称隐藏的成员 当构造函数的参数名与类的成员变量名相同时,可使用this关键字来区分它们,明确是在访问类的成员变量。示例代码如下: ```csharp public class Employee { private string alias; private string name; public Employee(string name, string alias) { // Use this to qualify the members of the class // instead of the constructor parameters. this.name = name; this.alias = alias; } } ``` 在上述代码里,`this.name` 和 `this.alias` 明确表示访问的是类的成员变量,而非构造函数的参数 [^3]。 ### 将对象作为参数传递给方法 可以把当前对象作为参数传递给其他方法。示例代码如下: ```csharp class Employee { private string name; private string alias; private decimal salary = 3000.00m; // 构造函数 public Employee(string name, string alias) { this.name = name; this.alias = alias; } // 打印方法 public void printEmployee() { Console.WriteLine("Name: {0}\nAlias: {1}", name, alias); // 将当前实例对相传到CalcTax()方法 Console.WriteLine("Taxes: {0:C}", Tax.CalcTax(this)); } public decimal Salary { get { return salary; } } } class Tax { public static decimal CalcTax(Employee E) { return 0.08m * E.Salary; } } class MainClass { static void Main() { // 实例化 Employee E1 = new Employee("Mingda Pan", "mpan"); // 调用方法 E1.printEmployee(); } } ``` 在 `printEmployee` 方法中,`Tax.CalcTax(this)` 将当前的 `Employee` 对象作为参数传递给 `Tax` 类的静态方法 `CalcTax` [^3][^5]。 ### 声明索引器 this关键字可用于声明索引器,允许对象像数组一样通过索引访问元素。示例代码如下: ```csharp public int this[int param] { get { return array[param]; } set { array[param] = value; } } ``` 这里定义了一个索引器,可通过索引 `param` 来访问 `array` 数组的元素 [^3]。 ### 扩展方法 在扩展方法中,this关键字用于修饰第一个参数,表明该方法是为该类型扩展的。示例代码如下: ```csharp public static class MyExtensions { public static int WordCount(this String str) { return str.Split(new char[] { ' ', '.', '?' }, StringSplitOptions.RemoveEmptyEntries).Length; } } ``` `WordCount` 方法是为 `String` 类型扩展的方法,可像调用 `String` 类型的实例方法一样调用它 [^4]。 需要注意的是,this关键字只能在实例构造函数、实例方法或实例访问器中使用,在静态成员中使用this是不允许的,因为静态成员由类来访问,而this访问的是类的实例 [^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值