如何在fun()方法中获取与参数同名的全局变量i
问题:方法参数与类成员同名时,如何在方法内获取类成员变量?
以下是相关代码:
class sample { public int i; //类成员变量 public int[] arr = new int[10]; public void fun(int i, int val) { Console.WriteLine(this.i); //注释写输出为11,但实际执行应输出1 arr[i] = val; Console.WriteLine(arr[i]); } } class Program { static void Main(string[] args) { sample s = new sample(); s.i = 1; s.fun(1, 7); Console.ReadLine(); } }
此处方法参数的名称与类成员变量的名称相同。
解决方案
在C#中,当方法参数和类成员变量同名时,有两种实用方式获取类成员:
- 使用
this关键字:this代表当前类的实例,通过this.i可以明确指向类的成员变量,而非方法的参数。你代码里已经用到了这个方式,但注释里的输出描述有误——按照Main方法中的赋值逻辑,this.i的实际输出应该是1,不是11。 - 修改成员变量命名规范:给类成员变量添加统一前缀(比如
_),将i改为_i,这样参数和成员变量名称不再冲突,直接写_i就能访问,同时也能提升代码的可读性,示例如下:
class sample { public int _i; //类成员变量 public int[] arr = new int[10]; public void fun(int i, int val) { Console.WriteLine(_i); //直接访问,无需this arr[i] = val; Console.WriteLine(arr[i]); } } class Program { static void Main(string[] args) { sample s = new sample(); s._i = 1; s.fun(1, 7); Console.ReadLine(); } }
内容的提问来源于stack exchange,提问作者Prakash sekar
相关产品推荐
相关产品推荐

