想听听大家的看法。谢谢

解决方案 »

  1.   

    起码 更安全
    如: protected void Check()
    {
      判断条件;
    }
    public string Name
    {
     get { 
    Check( );
    return name;}
    set {
         Check( ); 
        name=value;
    }
    }
      

  2.   

    1.封装的需要,通过set get的共有方法,可以将类中的属性用private封装起来,其他类需要访问该属性的时候,通过该类共有的set get方法访问即可。
    2.传递参数较方便,当你需要依次传递某个类多个参数的时候,可以通过该类的set get方法将属性set保存起来,传参的时候传递该类的引用就OK了。
      

  3.   

    封装,对外部有个安全的接口
    虽然有时候字段也可以代替属性,但属性内部可以写代码,可以调用类的私有函数,而字段除了取值和赋值外,不能干其他的事了,要是同时再干其他的事,只能通过公共函数来执行,对外部调用者来说多走了一部,起不到封装的效果
    举例说明:
    public class TV
    {
            public Color m_clrTVColor; //公共字段,当前电视的颜色
                     private Color m_clrTVpColor; //私有字段,当前电视的颜色,配合下面的属性用
             public Color TVColor
            {
                   get{return m_clrTVpColor;}
                   set{m_clrTVpColor=value;
                   ChangeTVColor(); //切换电视颜色
                     }
             }        //切换电视颜色
            public void ChangeTVColor()
           {
             ....
            }
    }//用公共字段调用需要执行两步
    TV tv=new TV();
    tv.clrTVColor=Colors.Red;
    tv.ChangeTVColor();
    //而用属性,只需执行一步
    TV tv=new TV();
    tv.TVColor=Colors.Red;
      

  4.   

    字段也可以设置访问权限(可读/可写/可读写)
    Public ReadOnly m_clrColor As Colorpublic readonly Color m_clrColor;
      

  5.   

    public writeonly Color m_clrColor;
      

  6.   

    晕,貌似writeonly在字段中不能用,那只能用属性了
      

  7.   

    进一步体现其封装特性
    其实在c++里很多地方就提倡这么用,特意用一个Get(),Set()函数来封装字段
    而c#就是标准化了,更好运用
      

  8.   

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

  9.   

    属性只是一个 语法, 实际是函数调用写过 C++ 的都知道为了封装性而编写若干 get() set() 的痛苦C# 编译器自动给处理了.但是要知道她的函数本质.当然, 除了函数本质外, 在设计时支持, 以及框架若干功能上,
    属性也有便利.
      

  10.   

    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***". 
      

  11.   

    方便易用,也可能考虑到VB、Delhpi等程序员的习惯等。
      

  12.   

    对于不同的角色,不同的访问权限
    只写不读只有set即可
      

  13.   

    令人迷惑的是,你连get的权限都没有,又如何能对它set呢?
    是通过调用类中其他的方法来实现吗?
    但这个属性没有get,其他方法又如何能获取并操纵它的value呢?这种权限的设置是通过其他辅助方法来实现,还是单纯用只有set的属性就能实现呢?
      

  14.   

    只能写不能读,一般就是赋值而不需要知道原先值是多少时用的
    其实就是覆盖以前的值(不管以前的值是多少),所以不需要get比方说电视颜色,不用知道以前是什么颜色,我只想它现在的颜色变成红色即可
      

  15.   

    覆盖操作正好是个特例。public class MyClass
    {
       private int _test;
       public int Test
       {set _test = value;}
       public MyClass(){}
    }MyClass mc = new MyClass();
    mc.Test = 100;// right
    mc.Test += 10;//wrong. Error Msg:属性或索引器“xx.xx.Test”无法用于此上下文中,因为它缺少 get 访问器
    mc.Test = mc.Test + 10;//wrong. Error Msg is the same.
      

  16.   


    无中生有,装牛角尖!这东西,谁让你用属性?怎么用?
    封装,函数,类,接口都可实现!!!带扣款参数进来,,,判断是否足够扣款,足够返回 TRUE,不足够返回 FALSE;
    再进行 扣款。根本什么都不会返回!
      

  17.   

    不算正解, 引入属性是为了节省重复的定义 get/set 函数
      

  18.   

    纯粹的字段太过暴露,getter/setter方法又太繁琐,弄成属性,既能像字段那样读取赋值,又具有getter/setter方法的功效
      

  19.   

    属性在调用的过程中其实是调用一个函数,在《Effective c#》这样写道:
    能用字段的部分最好都用属性来实现。因为属性的调用在编译过程中是解释为方法的,具体的妙处可以看看,有很详细的解释。
      

  20.   

    用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】
      

  21.   

    是为了在给private的赋值和读取时,增加一些逻辑判断吧。
      

  22.   

    小结一下:
    C#引入属性,是为了更好的实现封装性。具体表现为:
    1.数据安全:字段只在内部使用,属性作为对外接口。
    2.读写权限:get/set轻松实现对读写权限的控制。
    3.函数本质:属性的调用在编译时解释为方法,属性中可以调用其它方法,这些方法对调用者透明。
    4.接口定义:定义接口时只能用属性及方法,不能定义字段。结贴。
      

  23.   

    哪有什么深奥的,属性说起来就是用来增加封装性和可维护性
    比如你写一个类,有一个string的成员变量Data,原本程序逻辑上Data是null就是null,但是某天多了一个规则,规定data绝对不准是null,如果是null的话就用某个特别的常量,比如<null>表达。如果你用的是Field的话不就立即傻眼了?而如果用的proptery的话在get方法里面直接修改一下就可以用了还有只能写的属性也没有什么不可理解的,一般我们在构造方法里面通过参数对类的私有变量作初始化,但是有些情况可能在类创建的时候还无法获得初始化值,那么为了确保私有属性不被读到,就用只写的属性作初始化。通常这样的属性都是对象属性不太担心会被人乱写,反倒担心会被人乱改内容