可能重复:
Isthis
keyword optional when accessing members in C#?
When do you use the “this” keyword?
class Program
{
public class Demo
{
int age;
string name;
public Demo(int age, string name)
{
// 'THIS' KEYWORD IS ADDED IN THESE TWO LINES THEN ONLY IT WORKS
age = age;
name = name;
}
public void Show()
{
Console.WriteLine("Your age is :" + age.ToString());
Console.WriteLine("Your name is : " + name);
}
}
static void Main(string[] args)
{
int SENDage;
string SENDname;
Console.WriteLine("Enter your age : " );
SENDage=Int32.Parse(Console.ReadLine());
Console.WriteLine("Enter your name : ");
SENDname=Console.ReadLine();
Demo obj = new Demo(SENDage, SENDname);
obj.Show();
Console.ReadLine();
}
}
我找到了这个理由,但有人可以向我解释一下吗?
本地数据成员年龄,名称优先于实例成员。
我无法理解。
答案 0 :(得分:4)
在这种情况下,不需要this
关键字。仅在更改以下声明时才需要:
int a;
string n;
进入
int age;
string name;
要使用类变量而不是构造函数的参数,您必须使用this
分配它:
public Demo(int age, string name){
this.age = age;
this.name = name;
}
答案 1 :(得分:2)
当我将它复制粘贴到控制台应用程序中时,此代码运行正常。
“this”关键字是什么意思?不编译吗?您使用的是哪个版本的Visual Studio?
或者,这是整个代码还是只是描述问题的演示? 从错误消息看,你似乎在其他地方定义了“年龄”和“名字”,也许“a”和“n”之前被称为“年龄”和“名字”?
答案 2 :(得分:1)
在您的代码中,参数名称age
和类成员age
具有相同的名称。
public class Demo
{
int age;
string name;
public Demo(int age, string name)
{
age = age;
name = name;
}
.....
}
当您的代码执行构造函数时,它首先搜索局部变量,然后搜索类变量。由于它将age
和name
都作为局部变量,因此会将值重新分配给它。
现在,如果您使用this
关键字来指定值,则此关键字引用当前对象,从而将值分配给对象。
public class Demo
{
int age;
string name;
public Demo(int age, string name)
{
this.age = age;
this.name = name;
}
.....
}