A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 黑马龙超 中级黑马   /  2012-6-7 11:55  /  2813 人查看  /  11 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 黑马龙超 于 2012-6-7 13:59 编辑

Class Person
{
        public int age=10;
        public void Function(int age)
        {
                this.age=age;
        }
}
这里虽然可以用this.age区分参数age,但字段age为什么不和参数age作用域冲突?

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

11 个回复

倒序浏览
this 是一个保留字,仅限于构造函数和方法成员中使用
在类的构造函数中出现表示对正在构造的对象本身的引用,在类的方法中出现表示对调用该方法的对象的引用,在结构的构造上函数中出现表示对正在构造的结构的引用,在结构的方法中出现表示对调用该方法的结果的引用
this 保留字不能用于静态成员的实现里,因为这时对象或结构并未实例化
在 C# 系统中,this 实际上是一个常量,所以不能使用 this++ 这样的运算
this 保留字一般用于限定同名的隐藏成员、将对象本身做为参数、声明索引访问器、判断传入参数的对象是否为本身

评分

参与人数 1技术分 +2 收起 理由
宋天琪 + 2

查看全部评分

回复 使用道具 举报
Public void Function(int age)
{
      this.age=age;
}
参数里面的int age相当于局部变量,只在下面{}内有效。而this.age则是指Person类的age

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
请看下面的实例,这里的this表示当前实例,当前类;this.name表示当前类中的name字段,而单独的name表示参数name;这个不会冲突,因为在程序中有个"好莱坞原则",就类似"就近原则";

class Student
    {
        public Student(string name)
        {
            this.name = name;
        }
        string name;
        public string Name
        {
            get { return name; }
        }
    }

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
不会啊,他们两不是代表同一个东西。
this.age代表是对像的age
age代表当前函数的参数 正因为方法里的age作用域只是限在于方法内,所以他并不影响外面的age。

这段代码你可以改成这样可能就清楚一些

Class Person
{
        Public int age; 在这先不给他付值
        Public void Function(int age)
        {
                this.age=age;
        }
}

然后在入口函数里 你可以调用这个方法Function(100);传一个100进去
最后你打印下age的值看看。

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
不冲突,一个代表的是类的对象,一个代表的是参数,但是最好不要这要命名,容易产生混乱

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
   this.name = name;
不冲突,this是指创建对象,如果少了this那就不行了,两个name都是函数作用域的局部变量了。

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
呵呵    我感觉是这样的  字段age是全局变量 参数age是仅限于方法内部 所以从内存来看他们都是存在的  this.age 指的是当前的类得实例!!呵呵

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
this是指当前引用的对象,而构造函数中变量是局部变量
不影响

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
this表示当前类,this.name表示当前类中的name字段,不影响。

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
this 可以代替当前类,this.age 是指类的成员变量,=age是形参

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
有this来区别,this代表这个字段是当前这个类的

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马