请教基础问题:只读属性和有返回值的方法有何不同?各自有何优缺点?各应用在何处?

Triumph 2008-10-27 08:28:03
如题
...全文
121 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
hhhh63 2008-10-27
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 Triumph 的回复:]
楼上说的这些我都知道。
希望大家能结合实际开发中的体会,有点深度地谈一谈
[/Quote]

补充一下,举一个例子:
有一个类,类的对象会移动,“移动”作为一个方法还是属性呢。
可以是属性:speed = 100; // 以100的速度移动。
也可以是属性:move( 100 );
两者都全理。

如果说对象的宽度和高度的话,用属性合理。
如果是建立和销毁对象,用方法合理。

举这些例子,说明一个问题,首先要从语文和计算机两个方面理解这两个词意思,然后再对具体的对象进行分析,有些性质是模棱两可的,即可是属性,也可是方法,这些性质分配合理了,水平就高了。

stning 2008-10-27
  • 打赏
  • 举报
回复
本质上能理解成一样,但是方法确提供了更多的灵活性
hhhh63 2008-10-27
  • 打赏
  • 举报
回复
从底层看,查看一下编译结果,如果返回的只是一个值,它和成员变量是一样的。如果有较多代码,它和方法是完全一样的。

从代码的角度看,应该说是一个代码的书写标准和名称问题。过去c++类分成员变量和成员函数,后来发展成为属性和方法(因为所有面向对象的语言都这样叫),方法和成员函数是一个东西的两种叫法,属性原来就是成员变量,后来进步了一些,在设置和获取属性的时候可以做一些简单的相关的工作。

个人理解,设置和获取属性的时候不应做复杂的工作。

本人观点,如有雷同,纯属巧合。
amandag 2008-10-27
  • 打赏
  • 举报
回复
只读属性和有返回值的方法有何不同?各自有何优缺点?各应用在何处?
==
只读属性其实IL编译后就是一个方法,所以两者严格来说没什么区别

如果要说有区别,一般我们习惯在C#中用属性来封装字段,当然就像java一样用方法封装也是可以的
patrickpan 2008-10-27
  • 打赏
  • 举报
回复
一个是方法,一个是属性,两者风马牛不相及啊
dz_huanbao 2008-10-27
  • 打赏
  • 举报
回复
两者在代码应用层面上是等价的,但由于属性兼具变量(只读属性可以看做变量的特例)的特点,集成开发环境能够在属性浏览器中观察到它的存在。
也就是说,.NET类库(尤其是控件相关的类库)存在大量的属性并不是因为采用方法实现不了相关功能,而是属性特有的优点使设计人员必须这么做。
所以,如果用户自定义控件(UserControl),建议优先使用属性而不是方法。不过属性相对于方法的缺点是不能传递输入参数,这一点需要切记。
Triumph 2008-10-27
  • 打赏
  • 举报
回复
楼上说的这些我都知道。


希望大家能结合实际开发中的体会,有点深度地谈一谈
acqy 2008-10-27
  • 打赏
  • 举报
回复
从技术层面来看,只读属性在编译时会被翻译成一个带有返回值的get方法,也就是跟带有返回值的方法意义相同。
从面向对象层面看,属性更加体现某个事物所具有的某个特性,而方法则更加偏向于体现事物的行为。
比如,人有名字,那么这个名字就是人的一种特性,而如果把名字定义为方法,就会觉得有点别扭:因为人本身没有“获得自己的名字”这样的行为。
或许这个例子也不是很恰当,楼主可以根据实际情况来使用属性与方法。
冷月孤峰 2008-10-27
  • 打赏
  • 举报
回复
从 返回值 这一点上是一样的
wanghui0380 2008-10-27
  • 打赏
  • 举报
回复
只读属性上看,意义是一样滴

hongqi162 2008-10-27
  • 打赏
  • 举报
回复
属性可以在数据在可被轻松访问的同时,仍能提供方法的安全性和灵活性
enihs 2008-10-27
  • 打赏
  • 举报
回复
简单点理解的话,相对于c语言来说,属性说到底它还是变量,可理解为变量取到值和函数的返回值的区别。
jwenyun 2008-10-27
  • 打赏
  • 举报
回复
LZ这是啥意思啊?
clbcy 2008-10-27
  • 打赏
  • 举报
回复
属性看起来比较形象
acqy 2008-10-27
  • 打赏
  • 举报
回复
楼上很多回复也举了不少例子。主要还是面向对象设计思想上的区别。从代码本身,既可以用属性,也可以用方法,只不过属性和方法有语义上的区别。
kfps8kfps8 2008-10-27
  • 打赏
  • 举报
回复
mark

110,534

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧