当前位置:编程学习 > C#/ASP.NET >>

初学者问题:类为什么要用set get ? 直接操作这个字段不行吗?

定义一个类:
Public Class myClass
   Private _name as  String
   Property name() as STring
      Get 
        return _name
      End Get
      Set (ByVal value as String)
        _name = value
      End Set
   End Property
 End Class

你要赋值的时候,要做:

Dim person as myClass = New myClass

    person.name = 'John'

    ......

我的疑问是,为什么不直接按下面的定义,直接定义一个字段,然后赋值不就行了吗?为什么要set get 这么麻烦:

Public Class myClass
  public name As String
End Class

要赋值运算的时候:

Dim person as myClass = new myClass 
    person.name = 'john'

     .......

初学者,不好意思,求教。 --------------------编程问答-------------------- 设置变量的属性可以控制该变量的可读性和可写性
比如你可以将该变量设置为只读,而不可写。
变量的属性也可实现一些特定的功能,还是比较好用的。

直接定义变量,其实只是默认了该变量的读写性而已。 --------------------编程问答-------------------- 谢谢你的解释。不过还是有些疑惑。

读写可控,这个可以理解。但是程序都是你编的,你要想控制读写你在程序里就可以实现,我就不明白为什么要加这么多罗罗嗦嗦的东西。

变量属性可以实现一些特殊的功能,比如?。。。。。。

我还是没明白,定义Property  get set, 它比直接定义变量到底好在哪里。

--------------------编程问答-------------------- 从初学者的角度看,使用属性而不是字段,一个明显的好处在于,你编写的对象就支持标准的控件数据绑定了。 --------------------编程问答--------------------
引用 2 楼  的回复:
谢谢你的解释。不过还是有些疑惑。

读写可控,这个可以理解。但是程序都是你编的,你要想控制读写你在程序里就可以实现,我就不明白为什么要加这么多罗罗嗦嗦的东西。

可能在你上学时,你接触到源代码的程序都是你自己编的。

但是你工作了就不一样了。 --------------------编程问答-------------------- 大多数“技术”,其实核心是在技术之外。你没有需求,就没有办法理解那些技术。 --------------------编程问答-------------------- WPF的绑定字段不行,属性才行 --------------------编程问答-------------------- http://www.doc88.com/p-546677441985.html

看看这篇文章,你会对类的理解 好处比较透彻,

实际上就是  方便复用,扩展,维护 --------------------编程问答--------------------
引用 7 楼  的回复:
http://www.doc88.com/p-546677441985.html

看看这篇文章,你会对类的理解 好处比较透彻,

实际上就是  方便复用,扩展,维护


http://www.cnblogs.com/yinxiangpei/articles/2357091.html

这个更加贴题了  --------------------编程问答-------------------- 现在也不用getset了。
直接用 

Property ID as int64 

来定义属性了。 --------------------编程问答-------------------- --------------------编程问答--------------------
引用 9 楼  的回复:
现在也不用getset了。
直接用 

Property ID as int64 

来定义属性了。


能具体说说吗?

感谢各位,特别是看了7楼8楼的两篇,对OO的方法了解了很多。 --------------------编程问答-------------------- 定义属性是很多好处的,一个最简单的例子就是可以监控属性的变化
在属性读取或者更改时做相应的处理,例如激发相应的事件
如果你用变量的话就很难实现这样的功能了 --------------------编程问答-------------------- 有一个长方形对象,有三个属性,长,宽,周长。
如果只是用普通的变量成员来定义,每次再给对象赋值是,需要考虑周长是否跟随变化,但是如果使用属性就可以
周长()
{
get{return 长*宽;}
} --------------------编程问答--------------------
引用 13 楼  的回复:
有一个长方形对象,有三个属性,长,宽,周长。
如果只是用普通的变量成员来定义,每次再给对象赋值是,需要考虑周长是否跟随变化,但是如果使用属性就可以
周长()
{
get{return 长*宽;}
}

我数学体育老师教的... --------------------编程问答-------------------- 哈哈哈 --------------------编程问答--------------------
引用 5 楼  的回复:
大多数“技术”,其实核心是在技术之外。你没有需求,就没有办法理解那些技术。


+1
很有道理 --------------------编程问答-------------------- 你不了解历史,所以也就不了解这个

出现属性概念,因为事件驱动的IDE。比如你在IDE里对一个Color属性设置为Red,结果字就变成红色了

IDE凭啥就知道你把这个东西设置了,他就需要做相应修改呢?

为了做到这样的结果,人们只能人为规定,一套固定规则。早期这套固定规则一般是带命名规则的两个方法

XXX_set()
XXX_get()

只是c#的研发人员人为分开写不容易识别,所以他们把这个玩意包装一下封在了一起,变成了{get;set;}

ps:

  Color
  {
   set{ 通知IDE去修改界面颜色}
  }
 单纯一个字段,IDE是不知道你修改了滴,你还是需要和IDE约定一个set方法 --------------------编程问答-------------------- 一旦出现事件驱动编程需求,属性的出现可以说基本就是一个必然的结果

不管他在对应语言的语法形式如何,“属性”这种概念一定会存在

属性一方面提供内部封装,外面没必要知道 我怎么处理把男变成0,女变成1的。
另一方面为事件驱动编程提供基石,set,get都是有逻辑的,自然在逻辑出来的过程就可以带入事件消息通知处理过程 --------------------编程问答-------------------- 先明白why,才能真正懂得how --------------------编程问答-------------------- 了解一下动机,然后才明白。
变量的局限性比较多,特别是面向对象的时候。 --------------------编程问答--------------------
引用 14 楼  的回复:
引用 13 楼  的回复:

有一个长方形对象,有三个属性,长,宽,周长。
如果只是用普通的变量成员来定义,每次再给对象赋值是,需要考虑周长是否跟随变化,但是如果使用属性就可以
周长()
{
get{return 长*宽;}
}

我数学体育老师教的...

哥们有点意思
补充:.NET技术 ,  VB.NET
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,