'this'关键字的用途是什么,原因是什么?

时间:2011-05-21 11:04:54

标签: c# .net this keyword

  

可能重复:
  Is this 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();
        }
    }

我找到了这个理由,但有人可以向我解释一下吗?

本地数据成员年龄,名称优先于实例成员。

我无法理解。

3 个答案:

答案 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;
     }

     .....
}

当您的代码执行构造函数时,它首先搜索局部变量,然后搜索类变量。由于它将agename都作为局部变量,因此会将值重新分配给它。

现在,如果您使用this关键字来指定值,则此关键字引用当前对象,从而将值分配给对象。

public class Demo
{
     int age;
     string name;

     public Demo(int age, string name)
     {
          this.age = age;
          this.name = name;
     }

     .....
}