代码第二段中的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
相关产品推荐
相关产品推荐

