我看到书中的代码是这样的:  public class Connection
      
            public Connection()
            {
            private string name;
            public string Name
            {
                get
                {
                    return name;
                }
                set
                {
                    name = value;
                }
            }
用的时候呢: 
            Connection myConnection = new Connection();
            myConnection.Name = "Frist connection";我想问的是 我定义的时候直接这样:  public string name;
             用的时候这样:
             Connection myConnection = new Connection();
            myConnection.name = "Frist connection";
应该也是可以的吧?  我知道这样不好,请问问书上的做法有什么好处?这样写的道理在那?谢

解决方案 »

  1.   

    几乎一样,如果写成属性,可在其中加入事件处理
    set
    {
      if(value.Length > 0)
      {
        //code    
      }
      name = value;
    }
      

  2.   

    举个例子吧:
    private int age;
    public int Age 

       get 
      { 
      return name; 
      } 
      set 
      { 
      if(name>0)
      name = value;
      else
     messagebox.show("年龄不能为负数");
      } 

    如果执行下面的语句,你会发现年龄会有负数吗??不会,但程序不会报错!!
    age=-18;
    但执行下面的语句,则会报错,这是因为set里面可以添加判断!!
    Age=-28
      

  3.   

    属性结合了字段和方法的多个方面。对于对象的用户,属性显示为字段,访问该属性需要完全相同的语法。对于类的实现者,属性是一个或两个代码块,表示一个 get 访问器和/或一个 set 访问器。当读取属性时,执行 get 访问器的代码块;当向属性分配一个新值时,执行 set 访问器的代码块。不具有 set 访问器的属性被视为只读属性。不具有 get 访问器的属性被视为只写属性。同时具有这两个访问器的属性是读写属性。与字段不同,属性不作为变量来分类。因此,不能将属性作为 ref(C# 参考)参数或 out(C# 参考)参数传递。属性具有多种用法:它们可在允许更改前验证数据;它们可透明地公开某个类上的数据,该类的数据实际上是从其他源(例如数据库)检索到的;当数据被更改时,它们可采取行动,例如引发事件或更改其他字段的值。摘抄自MSDN
    http://msdn.microsoft.com/zh-cn/library/w86s7x04(VS.80).aspx