zoukankan      html  css  js  c++  java
  • .NET中公共变量与属性的区别

    在我们的程序中经常会出现以下的代码:
      如:   
      成员变量   
      public   string   Name;   
      或者用属性   
      private   string   name   
      public   string   Name()   
      {   
              get  { return   name; }   
              set  {  name   =   value;  }   
      }   

    当然,如果属性中get{} 和 set{}的方法不是这么简单或两个不同时出现的话,我们很容易区分出两者的区别。
    但就像上面这样的代码到底两者有什么不一样呢?对其它对象来说,这两者都是同样的访问,同样的赋值。只不过一个是变量,一个是属性而已。经过本人一段时间的理解,大概总结如下,不对之处还望指出。

    首先基于面向对象的原则来谈一下这个问题。
           面向对象的编程的目的地要做到 抽象、封装;在类中,变量是正对类本身而言,我们把它们叫做域。它可以为public   ,private等;属性是类的外部显示出来的特性。虽然域可以为public,但这样把域申明为public将不利于类的封装,因为外部使用者可以对类进行直接修改。所以我们就可以用到属性,我们只是公开它们的属性,至于如何对其进行赋值(set)如何进行取值(get)都已经进行了封装,对于类外部是不可见的。对于外部使用者来说只能够使用它,不能控制它,如何控制操作是由类自身决定的。这是一个方法原则上的区别,像上面的代码虽然用法上是一样的,但对于面向对象的思想来说是不一样的。

    再有,MSDN上这样说:http://msdn2.microsoft.com/zh-cn/library/sk5e8eth(VS.80).aspx

    变量和属性都表示可以访问的值。但在存储和实现方面有所不同。

    变量

    “变量”直接对应于内存位置。可以使用单个声明语句定义变量。变量可以是“局部变量”,在过程中定义且仅可用于该过程;它也可以是“成员变量”,在模块、类或结构中定义,但不在任何过程中定义。成员变量又称“字段”。

    属性

    “属性”是在模块、类或结构中定义的数据元素。使用 Property 和 End Property 语句之间的代码块定义属性。此代码块包含一个 Get 过程或一个 Set 过程,或两者都包含。这两个过程称为“属性过程”或“属性访问器”。除了检索或存储属性的值外,它们还可以执行自定义操作,如更新访问计数器。

    不同点

    下表指出了变量和属性之间的一些重要差异。

     
    差异点变量属性

    声明

    单个声明语句

    代码块中的一系列语句

    实现

    单个存储位置

    可执行代码(属性过程)

    存储

    直接与变量的值关联

    通常包含内部存储;在属性的包含类或模块外部,这些内部存储不可用

    属性的值可能作为也可能不作为一个存储元素1存在

    可执行代码

    至少必须有一个过程

    读写访问权限

    读/写或只读

    读/写、只读或只写

    自定义操作(接受或返回值以外)

    不可能

    可以当作部分设置或检索属性值执行

    1 和变量不同,属性的值可能不直接对应于单个存储项。为方便或安全起见,存储可能拆分为几块;也可能以加密格式存储值。在这些情况下,Get 过程将汇编这些块或解密存储值,然后 Set 过程会加密新值或将其拆分到构成存储的各个组成部分中。属性值可以是临时的,如一天中的某个时间,在这种情况下,每次访问此属性时,Get 过程将及时计算此属性。

            还有,经过实践发现,当我们把一个对象进行数据绑定时,属性是可以正常绑定,变量就不行。所以,当我们需要将类中的一个值设为public时,应该尽量使用属性而不是变量。

  • 相关阅读:
    图像的不变性及解决手段
    007 Go语言基础之流程控制
    008 Go语言基础之数组
    006 Go语言基础之运算符
    004 Go语言基础之变量和常量
    019 Python实现微信小程序支付功能
    018 Python玩转微信小程序
    017 python--微信小程序“跳一跳‘外挂
    016 用python一步一步教你玩微信小程序【跳一跳】
    025 nginx之日志设置详解
  • 原文地址:https://www.cnblogs.com/zwb7926/p/3274370.html
Copyright © 2011-2022 走看看