You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

代码第二段中的this关键字指代的对象是什么?

C#中this关键字的指代说明

背景代码与疑问

首先看第一段示例代码,其中this.Var1明确指代类内定义的字段值10:

class MyClass
{
int Var1 = 10;
public int ReturnMaxSum(int Var1)
  {    
   return Var1 > this.Var1
   ? Var1 
   : this.Var1;
  }
}

class Program
{
static void Main()
  {
    MyClass me = new MyClass ();
    Console.WriteLine($"Max: { mc.ReturnMaxSum(30) }");
    Console.WriteLine($"Max: { mc.ReturnMaxSum(S) }");
  }
 }

第二段是实现比较逻辑的代码,规则如下:

  • 若当前对象小于参数对象,返回负值;
  • 若当前对象大于参数对象,返回正值;
  • 若两个对象比较后相等,返回零。

疑问点:当前对象指的是什么?TheValue未被赋予初始值,如何与输入参数mc.Value进行比较?

class MyClass;IComparable
{
public int TheValue;
public int CompareTo(object obj) 
 {
   MyClass mc= (MyClass)obj;
   if (this.TheValue < mc.TheValue) return -1;
   if (this.TheValue > mc.TheValue) return 1;
   return 0;
  }
}

核心问题解答

在上述第二段代码中,this指代的是调用CompareTo方法的那个MyClass实例对象。

举个实际使用的例子:

MyClass obj1 = new MyClass { TheValue = 5 };
MyClass obj2 = new MyClass { TheValue = 10 };
obj1.CompareTo(obj2);

这里CompareTo方法由obj1调用,所以this就代表obj1,this.TheValue对应的是obj1的TheValue(值为5);方法参数里的mc是转换后的obj2,mc.TheValue对应obj2的TheValue(值为10),此时方法会返回-1,完全符合给定的比较规则。

关于TheValue未初始化的问题补充:C#中值类型的公共字段会默认初始化为0,所以即使没有显式赋值,TheValue也会以0参与比较,但实际业务场景中通常会在实例化对象时或者类的构造函数里给TheValue赋值,避免无意义的默认值比较。

内容的提问来源于stack exchange,提问作者bokabokaboka

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 15:14:51