日期:2014-05-18  浏览次数:20962 次

为什么要用属性(get,set),利用类中的公有字段不是照样可以实现这两个操作吗
为什么要用属性(get,set),利用类中的公有字段不是照样可以实现这两个操作吗


------解决方案--------------------
我晕 ........
string pro;
public string Property
{
get
{
MessageBox.Show("我不仅取得了pro的值,还可以大笑三声:哈哈哈,你字段可以吗?");
return pro;
}
set
{
pro=value;
MessageBox.Show("我不仅设置了value的值,还可以关你的机,你字段可以吗?");
//ShowDown();
}
}
------解决方案--------------------


属性编译后就是这样的

public object get()
{
.....
}

public void set(object value)
{
.....
}
------解决方案--------------------
使用属性主要是为了封装,把变量开放出来也没什么问题。不过不怎么符合面向对象的思想。
------解决方案--------------------
就是为了符合一个面向对象的思想吧了,其实都差不多,属性可以当一个方法使用
所以当代码多的情况下 能不用就不用
------解决方案--------------------
尽可能的使用属性(property),而不是数据成员(field)。
把所有的字段都设为私有字段,则把它们封装成属性,字段就是作用于整个类的变量。 
属性的实质是方法(get和set方法),数据安全
------解决方案--------------------
使用属性封装性好,可以对类外面屏蔽类内部的信息。只有自己定义的方法才能访问类中的成员变量会更安全。
------解决方案--------------------
属性是对类中公有字段的封装
------解决方案--------------------
get set 有如下作用:

1. 从面向对象的角度来讲,公开的是方法,而不是字段。
2. 可以在其中做附加处理,比如有效性check, 同步等。
3. 可以在接口中定义get set属性,从而有了抽象的作用。
4. 可以设置只读或者只写。
5. 性能上,对于简单的set或get,编译器会自动进行inline处理,从而没有函数进出栈的性能损失。
------解决方案--------------------
光设值可能二者没什么区别,甚至public变量更简便,关键是属性还可以做很多其他事啊
------解决方案--------------------
主要就是安全性
可以限制用户访问及修改属性是否合理~
------解决方案--------------------
1:公共字段必须同时可读可写,而属性可以只可读,或者只可写
2:属性内部可以实现额外逻辑,比如修改某属性的时候,你可以出发一个事件,或者连同改掉别的变量值
------解决方案--------------------
属性不光是值,属性还包含方法调用和事件调用和触发

比如一个很简单的,也很常见的属性 颜色(color)

你在vs设置color属性为红色,那么你会看见你的控件变成了红色,为啥??

因为更改属性值,同时也触发了重绘的调用,可以说属性的出现就是为了这种自动化操作而出现地


但是字段不同,你设置字段,你就必须显式调用方法


------解决方案--------------------
1.数据密封是面向对象设计和编程的一个主要特点,它意味着类型的字段永远不会公开地对外提供,可以防止对象的状态被破坏;
2.可以在访问的同时进行一些额外的操作、缓存某些值或者延迟创建一些内部对象;
3.对字段的访问线程安全;
4.如果访问的字段是一个逻辑字段,它的值不是由内存中的字节表示,而是经过某些运算得到的,这样的情况需要进行数据密封。

------解决方案--------------------
看来楼主需要好好理解一下面向对象思想了.
属性可以是只读或是只写,或者是Get和Set两个访问级别不一样.
属性还可以做其它变量做不到的事,比如:static Form1 frm;//这个时候frm为null,你就没办法直接使用,当然你也许会说static Form1 frm=new Form1();//不过这又违背了迟后绑定原则,只有在当需要的时候才去new.而属性就不同:
public static Form1 Instance
{
get{
if(frm==null || frm.isdisposed)
frm=new Form1

return frm;

}
}
------解决方案--------------------
探讨
属性是像函数一样使用。如果只涉及到获取或设置字段的值,我想使用公用字段,而不使用属性,可以么。


------解决方案--------------------
没什么不可以的,满足自己的要求就行