日期:2014-05-18  浏览次数:20684 次

请大家详解一下C#中属性有什么用?
我没有搞清楚属性到底有什么用,现在觉得一点用都没有,完全是多余的,我是才接触C#,希望大家讲解详细形象一点,最好能有个简单的例子,谢谢了

------解决方案--------------------
多做项目,慢慢感受,面向对象的一个很重要的原则就是封装,
不直接把类成员对外界公开。
属性可以完成封装。

数据绑定, ORM都需要用到属性。而且这正是他做最合适的事。

楼主注意结帖率。
------解决方案--------------------
如上面所说的,这是面向对象的一个基本要求,至于为什么这样做么,有2个原因。
1.这样写,日后便于升级维护,例如
C# code

public class Employee
{
    public int age;
}

Employee a = new Employee();
a.age = 100;//如果到了明年,我需要统一更新所有员工的年龄。

//如果用属性,就会很方便
public class Employee
{
    public readonly DateTime birthday;
    public int age { get { return (DateTime.Now - birthday).Days;} }
}

------解决方案--------------------
C#使用属性有以下几点好处:
1.Net对属性的支持远远大于对成员的支持,你可以对属性进行数据绑定,设计时说明等很多数据成员不
被支持的内容。看看.net里的属性面板,你会明白的。
2、数据安全性检测;
属性本质上是两个函数,只是因为C#的特殊语法,但我们可以像访问成员一样的访问它。因此我们可以
在属性设计上添加更多更灵活的内容,对属性进行管理。其中对属性数据的检测是其中之一。
在对数据检测时,如果发现数据不满足条件,最好以抛出异常的形式来解决
如在这
private string _name;
public String Name
{
get
{
return this._name;
}
set
{
if(条件)
{
如果不满足条件可以跑出异常
esle
this._name = value;
}
}
}

3、线程同步
对实例的属性可以进行线程同步,而与访问者无关
4、属性可以是抽象的,而数据成员不能是抽象的,这为我们设计出兼容性更强,扩展性更强的类提供了好
的解决方案。
5、属性可以以接口的形式表现。接口里不能定义数据成员,这在一定程度上限制我们的设计。请用属性来
解决这个问题吧。
6基于属性可以实现索引器
。。。。。。
虽然直接使用公共成员的效率比使用属性要高那么一点点,但是那种影响是很微不足道的。。
在effective C#中
这作为第一条来讲,可见其重要性了吧。。