注册 登录
编程论坛 C# 论坛

被属性和方法高糊涂了,,总觉的它们本质上是一样的,,求解惑

txxb 发布于 2017-07-01 15:30, 3927 次点击
struct xingzhuang
    {
        List<Point> _xing;//这个是字段了
        
        public Point[] xing
        {get { return _xing.ToArray(); }}
        //这个算是只读属性的写法吗?
看来属性的数据类型可以和字段的数据类型不同
        
        public void add(Point p)
        { _xing.Add(p); }
        //修改字段的方法
    }

可不可以理解为带默认参数(value)的方法就是属性???
6 回复
#2
leisiege2017-07-02 22:15
不是的。类里面属性和方法是两种东西。元数据是不一样的,一个是property,一个是method。
属性还能用value关键字。属性可以设置为只读。
属性有get和set。方法没有。
虽然说其实也可以理解为两个方法,设置和读取。但是还是不要混为一谈。
一般属性的作用是描述这个类有哪些特点。特点的赋值和读取有那些特征。比如可以加事件,验证之类的。
方法的作用是描述这个类有那些功能。
属性最初的作用是封装类的特征,使得外部不能直接修改类的字段。只能通过属性来赋值。
当然方法也能做到这一点。但是最后各司其职。
#3
leisiege2017-07-02 22:15
不是的。类里面属性和方法是两种东西。元数据是不一样的,一个是property,一个是method。
属性还能用value关键字。属性可以设置为只读。
属性有get和set。方法没有。
虽然说其实也可以理解为两个方法,设置和读取。但是还是不要混为一谈。
一般属性的作用是描述这个类有哪些特点。特点的赋值和读取有那些特征。比如可以加事件,验证之类的。
方法的作用是描述这个类有那些功能。
属性最初的作用是封装类的特征,使得外部不能直接修改类的字段。只能通过属性来赋值。
当然方法也能做到这一点。但是最后各司其职。
#4
txxb2017-07-03 09:04
class xingzhuang
    {
        List<Point> _xing;//这个是字段了
        
        public Point xing
        { set { _xing.Add(value); } }
        
        
        public void add(Point p)
        { _xing.Add(p); }
        //这两个,用属性好还是用方法好
#5
leisiege2017-07-03 22:06
方法。因为他的功能是更改自己的状态。不是设置自己的状态。
而且。_xing.Add(value)这种你不觉得别扭吗?
你的代码看起来会是这样
var x = new xingzhuang();
x.xing = new point();
x.xing = new point();
别人会认为他的属性被设置了两次,其实你的代码不是,你的代码是添加两个point进去。
你的_xing字段竟然是队列。。。。。。你说别人看你的代码会不会搞晕?
这样会被维护你代码的人骂。。。。
#6
八画小子2017-07-14 11:46
属性和方法在语法层面上是不同的。也可以说在面向对象概念上是两个概念,前者是对象的属性特征,后者是传递消息的接口。但在C#语言底层实现上,两者是同意的,属性的本质就是方法。

#7
cxj0912017-10-19 11:09
简单一点理解:属性本质就是方法。
属性只为字段服务。
方法为类服务,提供功能。
1