关于get和set访问器的问题。

chenshi 2004-11-04 10:13:56
class C
{
public int temp
{
get
{
return temp;
}
set
{
temp = value;
}
}
}

C c = new C();
c.temp = 0; //未处理的“System.StackOverflowException”类型的异常出现在 ConsoleApplication1.exe 中。
这里为什么会抛出一个异常?
...全文
154 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
风轻扬 2004-11-05
  • 打赏
  • 举报
回复
你用属性封装的字段和属性的名称是两个不同的东西,虽然很多时候名称相同,但也可以不同的。
风轻扬 2004-11-05
  • 打赏
  • 举报
回复
你属性的get和set中的temp是什么啊,应该先定义一个和你的属性返回值类型相同的变量如private int temp,然后再赋值或返回值。

属性的一个用途就是对字段(变量)的封装,你可以通过get和set来分别控制字段的读和写,而你用属性封装的字段如int temp,它的modifier都是private,这样可以防止字段被类以外的其他类型成员访问,而只能通过属性来进行,属性又可以只读或只写,而且代码更易读。
zhongwanli 2004-11-05
  • 打赏
  • 举报
回复
这样赋值,你需要再定义一个私有变量

去接收这个值
bacon_1982 2004-11-04
  • 打赏
  • 举报
回复
你在赋值的时候,调用set{}
但是set{}里面又对自己赋值,无穷递归下去不堆栈溢出才怪。

同样的道理 你用 int aaa = c.temp也一样会引发异常
popcorn 2004-11-04
  • 打赏
  • 举报
回复
又错了:private int _temp;
cellblue 2004-11-04
  • 打赏
  • 举报
回复
class C
{
int m_intTemp = -1;

public int temp
{
get
{
return temp;
}
set
{
m_intTemp = value;
}
}
}





你的
set
{
temp = value;
}
temp可是属性名称

popcorn 2004-11-04
  • 打赏
  • 举报
回复
class C
{
private _temp;
public int temp
{
get
{
return _temp;
}
set
{
_temp = value;
}
}
}
Andy__Huang 2004-11-04
  • 打赏
  • 举报
回复
get取得一個值

set 設置一個值

110,571

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧