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

解决方案 »

  1.   

    多做项目,慢慢感受,面向对象的一个很重要的原则就是封装,
    不直接把类成员对外界公开。
    属性可以完成封装。数据绑定, ORM都需要用到属性。而且这正是他做最合适的事。楼主注意结帖率。
      

  2.   

    尽可能的使用属性(property),而不是数据成员(field)。
    把所有的字段都设为私有字段,则把它们封装成属性,字段就是作用于整个类的变量。  
    属性的实质是方法(get和set方法),数据安全
      

  3.   

    如上面所说的,这是面向对象的一个基本要求,至于为什么这样做么,有2个原因。
    1.这样写,日后便于升级维护,例如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;} }
    }这样你任何时候访问age都不会有问题,也不需要更新,你也许会注意到birthday不是属性,事实上,那个标准是尽量的要求达到,个人还是觉得没必要所有都用属性,毕竟那样会慢一点。相当于一个函数调用嘛。但是,是不是我先写成成员变量,日后需要时候再修改为属性就可以了呢?不是!这就是第二个用属性的原因。
    2.属性被编译器转换为函数调用,而成员变量则是个直接访问。
    问题在哪里呢,如果你写了一个dll给别人,有一天,你吧变量修改为属性了。你认为你这样高明的做法是最小化改动么?你错了,使用你dll的人需要重新编译,否则无法使用的,因为对dll来说,编译后,你原本是变量的引用,被修改成函数调用了。在没有重新编译调用你dll的程序时,程序将依然用读取变量的方式来访问,而你的变量已经不存在,变成属性了。导致扩展性不好。处于这一点,还是尽量的使用属性。
      

  4.   

    尽量用属性,字段全部用私有等,不要直接暴露在外面,属性可以一个简单的应用是验证有效性
    比如
    public int aaa;
    这个
    obj.aaa="1000";//直接暴露了,如果只想0-100之间,不像让别人直接这样用,太不安全
    这样
    private int aaa;
    Public int AAA
    {
       set{if(判断下value值)然后在赋值给aaa;}
    }
      

  5.   

    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#中
    这作为第一条来讲,可见其重要性了吧。。
      

  6.   

    属性是面向对象编程的基本概念,提供了对私有字段的访问封装,在C#中以get和set访问器方法实现对可读可写属性的操作,提供了安全和灵活的数据访问封装。
    以下是简单的属性示例:
    public class MyProperty
         {
             //定义字段 
             private string _name; 
             private int _age;          //定义属性,实现对_name字段的封装 
             public string Name 
             { 
                 get { return (_name == null) ? string.Empty : _name; } 
                 set { _name = value; } 
             }          //定义属性,实现对_age字段的封装 
             //加入对字段的范围控制 
             public int Age 
             { 
                 get { return _age; } 
                 set 
                 { 
                     if ((value  > 0) && (value < 150))
                     { 
                         _age = value; 
                     } 
                     else 
                     { 
                         throw new Exception( "Not a real age");
                     } 
                 } 
             } 
         }      public class MyTest 
         { 
             public static void Main(string[] args) 
             { 
                 MyProperty myProperty = new MyProperty(); 
                 //触发set访问器 
                 myProperty.Name =  "Anytao";
                 //触发get访问器 
                 Console.WriteLine(myProperty.Name); 
                 myProperty.Age = 66; 
                 Console.WriteLine(myProperty.Age.ToString()); 
                 Console.ReadLine(); 
             } 
         } 
      

  7.   

    还想进来看下Attributes的,居然问的是Property
      

  8.   

    打个比方说:如果你客户端在中国,而服务器美国,如果客户端访问服务器数据进行一次传输会很慢,set{}可以把访问美国的数据存储,get{}调用时就是调用本地..速度当然会很快...而且还可以进行封装,增加安全性...