找回密码
 FreeOZ用户注册
查看: 2210|回复: 19
打印 上一主题 下一主题

[论坛技术] C# property

[复制链接]
跳转到指定楼层
1#
发表于 16-11-2010 12:42:58 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?FreeOZ用户注册

x
奇怪的问题:
public class EtDir {

    private String idDir;

    public String idEtDir
    {
        get { return idDir; }
        set { idDir = value; }
    }
}
当我用 EtDir aDir =  new EtDir();
aDir.idEtDir = "1"; 的时候没有错误。

当我把class 改成
public class EtDir {


    public String idEtDir
    {
        get { return idEtDir; }
        set { idEtDir = value; }
    }
}
当我用 EtDir aDir =  new EtDir();
aDir.idEtDir = "1"; 的时候总是出错, why??? 高手
回复  

使用道具 举报

2#
发表于 16-11-2010 13:11:58 | 只看该作者
public class EtDir {


    public String idEtDir
    {
        get; set;
    }
}
回复  

使用道具 举报

3#
 楼主| 发表于 16-11-2010 13:13:19 | 只看该作者
回复  

使用道具 举报

4#
 楼主| 发表于 16-11-2010 13:14:53 | 只看该作者
更奇怪的是,下面的class 工作的好好的
public class Event{

    public String idArticle{
        get { return idArticle; }
        set { idArticle = value; }
    }

    public String created{
        get { return created; }
        set { created = value; }
    }

    public String title{
        get { return title; }
        set { title = value; }
    }

    public String teaser{
        get { return teaser; }
        set { teaser = value; }
    }

    public String body{
        get { return body; }
        set { body = value; }
    }

    public String filename{
        get { return filename; }
        set { filename = value; }
    }
   
        
}
回复  

使用道具 举报

5#
发表于 16-11-2010 14:07:07 | 只看该作者
难道不会死循环么?

你call set idEtDir, 但是 set idEtDir又调用 set idEtDir....

评分

参与人数 1威望 +25 收起 理由
lufumin1832 + 25 谢谢分享!

查看全部评分

回复  

使用道具 举报

6#
 楼主| 发表于 16-11-2010 14:14:04 | 只看该作者
原帖由 lol 于 16-11-2010 14:07 发表
难道不会死循环么?

你call set idEtDir, 但是 set idEtDir又调用 set idEtDir....

哪来的死循环???
回复  

使用道具 举报

7#
发表于 16-11-2010 14:16:39 | 只看该作者
原帖由 lufumin1832 于 16-11-2010 14:14 发表

哪来的死循环???




public class EtDir {
    public String idEtDir
    {
        get { return idEtDir; }
        set { idEtDir = value; }
    }
}
回复  

使用道具 举报

8#
 楼主| 发表于 16-11-2010 15:42:52 | 只看该作者
原帖由 lol 于 16-11-2010 14:16 发表




public class EtDir {
    public String idEtDir
    {
        get { return idEtDir; }
        set { idEtDir = value; }
    }
}

这不是死循环,这是一个简化的格式。
回复  

使用道具 举报

9#
发表于 16-11-2010 15:57:05 | 只看该作者
原帖由 lufumin1832 于 16-11-2010 12:42 发表
奇怪的问题:
public class EtDir {

    private String idDir;

    public String idEtDir
    {
        get { return idDir; }
        set { idDir = value; }
    }
}
当我用 EtDir aDir =  new E ...


啥错误信息?
回复  

使用道具 举报

10#
 楼主| 发表于 16-11-2010 16:03:01 | 只看该作者
原帖由 pengruijun 于 16-11-2010 15:57 发表


啥错误信息?

server 直接crash 了
回复  

使用道具 举报

11#
发表于 16-11-2010 16:15:35 | 只看该作者
原帖由 lufumin1832 于 16-11-2010 16:03 发表

server 直接crash 了

那就是上面有人说的, 死循环了。 stack overflow 了。
你放个breakpoint 在 set 那里, 应该是一直在那里自己call 自己了。

另: 有这种简化写法吗?

评分

参与人数 1威望 +25 收起 理由
lufumin1832 + 25 谢谢分享!

查看全部评分

回复  

使用道具 举报

12#
 楼主| 发表于 16-11-2010 16:22:28 | 只看该作者
原帖由 pengruijun 于 16-11-2010 16:15 发表

那就是上面有人说的, 死循环了。 stack overflow 了。
你放个breakpoint 在 set 那里, 应该是一直在那里自己call 自己了。

另: 有这种简化写法吗?

你问的我有点糊涂了。
我记得有。如果没有那我的event class为什么能工作呢?
回复  

使用道具 举报

13#
 楼主| 发表于 16-11-2010 16:25:40 | 只看该作者
靠,貌似真没有这种简化写法,我自创的
等我看看我的event的class
回复  

使用道具 举报

14#
发表于 16-11-2010 16:30:58 | 只看该作者
原帖由 lufumin1832 于 16-11-2010 15:42 发表

这不是死循环,这是一个简化的格式。


不是这样简化, 你的property不停的call itself.
回复  

使用道具 举报

15#
 楼主| 发表于 16-11-2010 16:31:16 | 只看该作者
sorry guys!
我的错误,events class从未被调用过。。。。。。。。。。。
我太愚蠢了。

话说回来c#这种封包也太愚蠢了。
回复  

使用道具 举报

16#
 楼主| 发表于 16-11-2010 16:33:10 | 只看该作者
原帖由 lol 于 16-11-2010 16:30 发表


不是这样简化, 你的property不停的call itself.

是的啊,
还得非再declair不同名字的property.
C#,我鄙视你
回复  

使用道具 举报

17#
发表于 16-11-2010 16:54:11 | 只看该作者
原帖由 lufumin1832 于 16-11-2010 16:33 发表

是的啊,
还得非再declair不同名字的property.
C#,我鄙视你


property 实际上是method, 帮助封装 private field. 所以要不同的名字。
回复  

使用道具 举报

18#
发表于 16-11-2010 18:56:00 | 只看该作者
death loop. if you use VS 2008  and .net , you still can use Auto Property.
回复  

使用道具 举报

19#
发表于 16-11-2010 20:19:26 | 只看该作者
原帖由 lufumin1832 于 16-11-2010 16:33 发表

是的啊,
还得非再declair不同名字的property.
C#,我鄙视你

我觉得在这点上C#没什么问题。
很多Porperty内部可能是有包含逻辑的,如果提供了类似你前面的那种简化实现,那么程序员怎么样才能访问到那个单纯不带逻辑的数据域呢?
不想多写代码的话,可以用VS自带的重构工具中encapsulate property功能把成员变量封装为属性

[ 本帖最后由 woodheadz 于 16-11-2010 20:25 编辑 ]
回复  

使用道具 举报

20#
 楼主| 发表于 17-11-2010 08:47:24 | 只看该作者
其实这种简化就很好
public class EtDir {


    public String idEtDir
    {
        get; set;
    }
}

本来我是用这个的,可惜server不支持,我也不知道自己怎么就自创了那个简化的
回复  

使用道具 举报

您需要登录后才可以回帖 登录 | FreeOZ用户注册

本版积分规则

小黑屋|手机版|Archiver|FreeOZ论坛

GMT+11, 5-11-2024 15:30 , Processed in 0.038477 second(s), 37 queries , Gzip On, Redis On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表