黑马程序员技术交流社区
标题:
属性赋值问题
[打印本页]
作者:
贡宗新
时间:
2013-4-5 08:25
标题:
属性赋值问题
本帖最后由 贡宗新 于 2013-4-11 12:16 编辑
Person5 p5=new Person5();
p5.Age=30;
Console.WriteLine(p5.Age);
class Person5
{
private int age;
public int Age
{
set
{
this.Age = value;
}
get
{
return this.Age; //死循环
}
}
}
为什么在属性中,明明知道this.Age会出错,自动提示为什么会提示出错误的来呢,难道this.Age还有其它的作用,求解释???
作者:
刘胜寒
时间:
2013-4-5 09:20
Console.WriteLine(p5.Age); 这句话错了
你的Person5中把Age给私有化了。
被private修饰的成员对外界是透明的,如果外界想访问被private修饰的成员。
必须通过Person5对外暴露的方法来获取
作者:
贡宗新
时间:
2013-4-5 09:35
主要是想搞清楚 this.Age的作用 Age是属性的名字,this加属性名有什么意义呢,难道只是为了让我们出错
作者:
庞立森
时间:
2013-4-5 10:21
本帖最后由 庞立森 于 2013-4-5 10:23 编辑
首先说你的代码错误太多,你要问的如下
其实在函数里面默认就有this.关键字,只是为什么这里面必须写呢?
因为你的属性的名字是age然后你的参数也是age,所以这里必须用this给予区分,
如果不加this而且都是同名,虚拟机不知道该给谁赋值,不知道你想要的是什么。
这时候就会出错。
this.age其实简单说就是你创建的对象(谁调用就是代表谁),在这里创建了一个P对象,所以代表的就是P
请参考下面的代码
class Person5
{
private int age;
Person5()//空构造函数
{
}
Person5(int age)//有参数构造函数
{
this.age=age;
}
public static void setAge(int age)//因为age私有,所以必须对提供一个方法对年龄进行设置
{
this.age=age
}
public static int getAge()//对外提供一个获取年龄的方法
{
return age
}
}
class Demo
{
public static void main(String[] agers)
{
Person5 p=new Person5(15);//这个也可以穿件一个空参数的对象Person5 p=new Person5();
//然后通过setAge()方法进行设置
p.setAge(12);
p.getAge();
}
}
作者:
张正强
时间:
2013-4-5 10:36
这个问题好畸形啊!首先,编译器不报错是因为this.Age= value;编译时语法没有出错,
至于运行时报的“堆栈溢出”错误是因为this.Age指的就是Age属性,你在Age属性里一直给Age属性(this.Age)赋值,但是属性不能保存值,所以会出错。
给字段赋值就ok了,例如( this.age= value;或者age= value;)
作者:
贡宗新
时间:
2013-4-5 10:55
好吧,是我没把代码i写完整,其实这个不是讲构造函数的,而是在看杨老师讲的属性视频的时候,杨老师这么写的,问结果是什么样,很容易写错的一点就是自动提示偶尔会把this.age写出this.Age然后就造成死循环了,错误是堆栈溢出,就想知道 this.Age与this.age的区别
namespace 第一个类
{
class Program
{
static void Main(string[] args)
{
Person5 p5=new Person5();
p5.Age=30;
Console.WriteLine(p5.Age);
Console.ReadKey();
}
}
class Person5
{
private int age;
public int Age
{
set
{
this.Age = value;
//this.age = value; 如果改成这句就对了
}
get
{
return this.Age; //死循环
// return this.age; 如果该成这句就对了
}
}
}
}
作者:
张正强
时间:
2013-4-5 11:13
贡宗新 发表于 2013-4-5 10:55
好吧,是我没把代码i写完整,其实这个不是讲构造函数的,而是在看杨老师讲的属性视频的时候,杨老师这么写 ...
this指的是Person5这个类,那么this.Age不就是Age属性,this.age不就是age字段嘛
作者:
郑丹丹1990
时间:
2013-4-5 12:59
本帖最后由 郑丹丹1990 于 2013-4-5 13:03 编辑
class person5
{
public int Age{get;set;}
}
person5 person=new person5();
person.Age=30;
您最好这样写。
或者
class Person
{
private int age;
public int Age
{
get { return age; }
set { age = value; }
}
}
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2