首页 新闻 论坛 群组 Blog 文档 下载 读书 Tag 网摘 搜索 .NET Java 游戏 视频 人才 外包 培训 数据库 书店 程序员
中国软件网
欢迎您:游客 | 登录 注册 帮助
  • C#属性的用途,什么情况下需要使用属性。麻烦给个例子。 [已结贴,结贴人:yw0903]
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-03 09:27:29 楼主
    C#属性的用途,什么情况下需要使用属性。麻烦给个例子。
    20  修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • hackztx
    • 等级:
    发表于:2008-05-03 09:32:181楼 得分:0
    C# code
    public class Student { public Student() { } private int _pkid; private string _name; private byte _age; private bool _sex; public int PKID { get{return _pkid;} set{_pkid=value;} } public string Name { get{return _name;} set{_name=value;} } public byte Age { get{return _age;} set{_age=value;} } public bool Sex { get{return _sex;} set{_sex=value;} } }
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-03 09:35:112楼 得分:0
    这个问题还真的不好说,多看看项目慢慢就理解了
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-03 09:38:123楼 得分:0
    麻烦说明一下嘛。知道是这样写。不清楚的是在什么情况下能用到。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-03 09:42:484楼 得分:0
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-03 09:51:385楼 得分:0
    属性结合了字段和方法的多个方面。对于对象的用户,属性显示为字段,访问该属性需要相同的语法。对于类的实现者,属性是一个或两个代码块,表示一个 get 访问器和/或一个 set 访问器。当读取属性时,执行 get 访问器的代码块;当向属性分配一个新值时,执行 set 访问器的代码块。不具有 set 访问器的属性被视为只读属性。不具有 get 访问器的属性被视为只写属性。同时具有这两个访问器的属性是读写属性。

    与字段不同,属性不作为变量来分类。因此,不能将属性作为 ref(C# 参考) 参数或 out(C# 参考) 参数传递。

    属性具有多种用法:它们可在允许更改前验证数据;它们可透明地公开某个类上的数据,该类的数据实际上是从其他源(例如数据库)检索到的;当数据被更改时,它们可采取行动,例如引发事件或更改其他字段的值。

    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-03 09:59:366楼 得分:0
    属性也是为了一个类中的私有变量进行封装,这样做是为了跟好的OO,当然对类中私有变量的访问及设置也可以通过方法来实现,但没有属性来的简洁
    例如
    C# code
    //没有属性只有公共变量,破坏封装 class A { public int a =0; } //没有属性只用方法,繁琐实在繁琐 class B { private int _b; public void SetbValue(int b) { this._b = b; } public int GetbValue() { return _b; } } //使用属性,对于c#3.0版本的还可以这样写,简洁啊 class C { public int c{ get;set;} }
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-03 10:22:187楼 得分:0
    谢谢 yunfeng007。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-03 10:29:028楼 得分:0
    用的最多应该就是 model层了,一个类对应一个数据库表结构,一个属性对应一个字段,实现了关系数据库到对象模型的转化。


    个人写代码时,也就是用属性获得的值,可以是现通过运算而得到的,不想普通的成员变量,只是一个值
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-03 11:07:229楼 得分:0
    那么下面这段代码有意义吗?
    C# code
    Class1.cs private DataTable dt = new DataTable(); public DataTable Dt { get; set; } public DataTable GetTable(string sql) { Class1 c = new Class1(); SqlConnection cn = Class1.CreateCn(); SqlDataAdapter da = new SqlDataAdapter(sql, cn); da.Fill(c.Dt); return c.Dt; }

    C# code
    Default.CS GridView1.DataSource = c.GetTable("select * from employee"); GridView1.DataBind();

    出现错误提示:
    值不能为空。
    参数名: dataTable
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-03 11:23:1510楼 得分:0
    个人感觉,属性的最大优势还是可以在值变化的时候绑定事件............
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-03 11:25:4611楼 得分:0
    引用 10 楼 popeyepower 的回复:
    个人感觉,属性的最大优势还是可以在值变化的时候绑定事件............

    能举列说明一下吗?谢谢。麻烦大家了。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-03 15:28:1612楼 得分:0
    数据绑定, ORM都需要用到属性。而且这正是他做最合适的事。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-03 15:32:3513楼 得分:0
    YUYUAN5212说的不错,多做项目肯定会有自己的理解
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-03 16:20:1114楼 得分:0
    8楼说的有理啊,属性应用到项目才有体会
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-03 19:32:0015楼 得分:0
    顶一下!!
    说得不错!!
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-03 19:43:4116楼 得分:0
    面向对象的一个很重要的原则就是封装,
    不直接把类成员对外界公开。
    属性可以完成封装。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-03 21:35:0117楼 得分:10
    1. 按照重构的理念,任何对字段的access,都应该通过接口(属性)实现,而不是通过直接access字段本身实现。包括在类内部使用也应遵循这个规则!!!
    2. 当你向外部公开一个属性时,你公开的是一个接口。属性只是从编程语言角度而言,与字段一一对应的。可是事实上,外部程序不需要也不应该知道你公开的接口与你内部的字段有什么关系。把属性做为一个接口使用,不要与你内部的字段相对应。(如果你在一个属性如FileA的注释里面写:Accessor of filed a,这是一个相当坏的习惯。应该写成:Set/Get the xxx property)
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-03 21:46:3018楼 得分:0

    用的最多就是业务实体里面了,
    一个类对应一个数据表,一个属性对应一个字段
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-04 01:05:2519楼 得分:10
    用属性邦定事件...楼主把分都给他吧,这个回答较有价值

    Action <int> Open;
    protected virtual void OnOpen()
    {
      if(this.Open!=null)
        this.Open();
    }

    int scoutValue;

    public Int ScoutValue
    {
      get{return this.scoutValue;}
      set{
          this.scoutValue=value;
          if(this.scoutValue <100)
            this.OnOpen();
          }
    }
    //
    因为事件是一个域所以可以额外的添加一些其它的"语句",这当然可以包括是去触发一个
    事件.
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-04 01:06:2320楼 得分:0
    上面写错了,是
    是"属性是一个域...".
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-04 07:22:1221楼 得分:0
    学习啦
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-04 08:25:0922楼 得分:0
    实体类中
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-04 08:45:2123楼 得分:0
    个人认为属性最初的目的还是为了封装.
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-04 08:58:1624楼 得分:0
    访问器还是Attribute?
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-04 10:35:5125楼 得分:0
    补充一下19楼的说法,属性绑定的事件通常还可以借助委托实现,这样可以定义自己的“事件”
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-04 11:20:4326楼 得分:0
    使用属性是最大程序保持类的成员变量不对外界暴露。可以限制外界对其访问的权限。
    修改 删除 举报 引用 回复

    网站简介广告服务网站地图帮助联系方式诚聘英才English 问题报告
    北京创新乐知广告有限公司 版权所有 京 ICP 证 070598 号
    世纪乐知(北京)网络技术有限公司 提供技术支持
    Copyright © 2000-2008, CSDN.NET, All Rights Reserved