C#为何要引入属性?

等不到来世 2009-11-25 10:11:03
想听听大家的看法。谢谢
...全文
522 61 打赏 收藏 转发到动态 举报
写回复
用AI写文章
61 条回复
切换为时间正序
请发表友善的回复…
发表回复
warlock 2011-11-07
  • 打赏
  • 举报
回复
能有效控制对外的可见性,保证类的安全性。
yzxdc 2010-01-05
  • 打赏
  • 举报
回复
哪有什么深奥的,属性说起来就是用来增加封装性和可维护性
比如你写一个类,有一个string的成员变量Data,原本程序逻辑上Data是null就是null,但是某天多了一个规则,规定data绝对不准是null,如果是null的话就用某个特别的常量,比如<null>表达。如果你用的是Field的话不就立即傻眼了?而如果用的proptery的话在get方法里面直接修改一下就可以用了

还有只能写的属性也没有什么不可理解的,一般我们在构造方法里面通过参数对类的私有变量作初始化,但是有些情况可能在类创建的时候还无法获得初始化值,那么为了确保私有属性不被读到,就用只写的属性作初始化。通常这样的属性都是对象属性不太担心会被人乱写,反倒担心会被人乱改内容
yanele 2010-01-05
  • 打赏
  • 举报
回复
新手进来学习!
卧_槽 2010-01-05
  • 打赏
  • 举报
回复
为了看起来爽
等不到来世 2010-01-05
  • 打赏
  • 举报
回复
小结一下:
C#引入属性,是为了更好的实现封装性。具体表现为:
1.数据安全:字段只在内部使用,属性作为对外接口。
2.读写权限:get/set轻松实现对读写权限的控制。
3.函数本质:属性的调用在编译时解释为方法,属性中可以调用其它方法,这些方法对调用者透明。
4.接口定义:定义接口时只能用属性及方法,不能定义字段。

结贴。
sniper1534 2009-11-26
  • 打赏
  • 举报
回复
up
liherun 2009-11-26
  • 打赏
  • 举报
回复
为什么用属性安全性就高了,给讲讲呗
liherun 2009-11-26
  • 打赏
  • 举报
回复
支持楼主
codeplaycn 2009-11-26
  • 打赏
  • 举报
回复
是为了在给private的赋值和读取时,增加一些逻辑判断吧。
gao1005 2009-11-26
  • 打赏
  • 举报
回复
为了扩展
wu8862889 2009-11-26
  • 打赏
  • 举报
回复
新手 学习下
wswg1987 2009-11-26
  • 打赏
  • 举报
回复
高手啊
HELLOWORDC 2009-11-26
  • 打赏
  • 举报
回复
用private对外封装就,但同时又要对外提供接口,不然老把自己封在一个圈子里怎么行?一个类要用另外一个类的私有数据,如果没有属性,你怎么调用它?

例如: partial class AboutDlg : Form
{
private static string _SoftwareName = "金点家庭记账簿";
public static string SoftwareName
{
get
{
return _SoftwareName;
}

set
{
_SoftwareName = value;
}
}
}

我如果在窗体的标题栏要用这个软件名称,我可以:
public partial class FrmMain : Form
{
public FrmMain()
{
InitializeComponent();
}

private void InitUI()
{
this.Text = AboutDlg.SoftwareName;
}
}






【原创家庭记账簿1.1,简单实用,欢迎工薪阶层、家庭主妇下载使用
http://download.csdn.net/source/1842593】
teng1988 2009-11-26
  • 打赏
  • 举报
回复
混个分!
zqtoo 2009-11-26
  • 打赏
  • 举报
回复
安全 /方便
等不到来世 2009-11-26
  • 打赏
  • 举报
回复
大家的讨论让我又学到许多东西,加分以示感谢。
等有空我来做下小结,然后结贴。
十八道胡同 2009-11-25
  • 打赏
  • 举报
回复
[Quote=引用 29 楼 szx1999 的回复:]
引用 24 楼 qldsrx 的回复:
引用 18 楼 szx1999 的回复:
能否控制为只能写,不能读?

老实说,我没看到过需要“只能写,不能读”的情况,即便是属性,只存在只读和可读写两种情况,没有人会用到只写的情况,Windows自带的目录访问权限不也是这样吗?

我不知道程序中是否有这样的实现,不过现实生活中还是有这样的需求的。
比如,我办了一张卡用于还贷,同时这张卡我也用于平时生活(尽管大家一般不会合用一张卡,但我就合用过)。
那么房地产商每月会从该卡扣去月供(可写),但他没有权利知道我的全部存款(不可读)。
[/Quote]
对于不同的角色,不同的访问权限
只写不读只有set即可
等不到来世 2009-11-25
  • 打赏
  • 举报
回复
[Quote=引用 24 楼 qldsrx 的回复:]
引用 18 楼 szx1999 的回复:
能否控制为只能写,不能读?

老实说,我没看到过需要“只能写,不能读”的情况,即便是属性,只存在只读和可读写两种情况,没有人会用到只写的情况,Windows自带的目录访问权限不也是这样吗?
[/Quote]
我不知道程序中是否有这样的实现,不过现实生活中还是有这样的需求的。
比如,我办了一张卡用于还贷,同时这张卡我也用于平时生活(尽管大家一般不会合用一张卡,但我就合用过)。
那么房地产商每月会从该卡扣去月供(可写),但他没有权利知道我的全部存款(不可读)。
会飞的老鱼 2009-11-25
  • 打赏
  • 举报
回复
方便易用,也可能考虑到VB、Delhpi等程序员的习惯等。
gbb21 2009-11-25
  • 打赏
  • 举报
回复
Property is some kind of uniform interface to leverage OO design. Using property can isolate interface and implementation, since people no longer care about the internal implementation of property.

Property could be easily implemented by a pair function calls, like "get***", "set***".
加载更多回复(41)

110,502

社区成员

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

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

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