C# 使用get set导致无限循环

逆袭的小学生 2016-04-23 10:29:38



为什么会无限循环呢

过程不应该是 程序自动为你创建一个私有属性Order,然后赋值就调用set么

是因为函数内部运算符重载么,具体是什么原因呢?
...全文
687 5 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
SoulRed 2016-04-23
  • 打赏
  • 举报
回复
因为你get set 操作的是Order 这个“方法” 而不是 Order的变量。 这样写 需要先声明一个私有的操作量。 private Order _order; public static Order order{ get{ return _order;} set{_order = value;} }
lili20090907 2016-04-23
  • 打赏
  • 举报
回复
引用 1 楼 songbing774933 的回复:
...........你在A的get里面返回A,能不无限循环吗? 两种写法: public object A { get; set; } 或者 private object _A; public object A { get{return _A;} set{_A=value;} }
不错
songbing774933 2016-04-23
  • 打赏
  • 举报
回复
...........你在A的get里面返回A,能不无限循环吗? 两种写法: public object A { get; set; } 或者 private object _A; public object A { get{return _A;} set{_A=value;} }
好几只小萝莉 2016-04-23
  • 打赏
  • 举报
回复 1
看来你是属性和变量没弄清楚哈。 带get、set方法声明的称为属性。编译的时候,判断是否有声明get、set其中一个。 声明get(set)有两种情况、 1、get{return ???;} 与 {set{???=value;}} 2、get; 与 set; ========================================================= 第一种、我且称之为具体声明(不知道怎么称呼,但是这不重要) 编译器会将其翻译为两种方法: XXX get_xxx() { return ???; }void set_xxx(XXX value) { ???=value; } ------------------------------------------------------ 那么翻译你的写法就是递归。而且是两个无限递归 XXX get_xxx() { return get_xxx(); }void set_xxx(XXX value) { set_xxx(value); } ========================================================= 第二种、我且称之为抽象声明(不知道怎么称呼,但是这不重要) 编译器也会将其翻译为两种方法,然而这里我们并未给定方法的具体实现, 所以编译器会自动翻译出两种方法为最简单的获取和设置的实现并且为其自动生成对应的存取变量
Sq-Zyz123 2016-04-23
  • 打赏
  • 举报
回复
引用 3 楼 DOwnstairs 的回复:
因为你get set 操作的是Order 这个“方法” 而不是 Order的变量。 这样写 需要先声明一个私有的操作量。 private Order _order; public static Order order{ get{ return _order;} set{_order = value;} }
没错。- -

111,093

社区成员

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

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

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