请问在类里声明成员为private并设置get,set方法和直接将其声明为public有什么区别? rt,听说声明为public安全性不够好,但有get,set方法不也一样吗?高手解惑! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 一般来说设为属性(set,get)要地道一些,首先你在赋值或取值的时候可能会作一些业务相关的检查和判断,也可能进行一些内部的操作,不过这些操作在外面看起来都是透明的。不过如果你确定不需要这样的操作,也可以直接把成员声明为public,毕竟这样效率还高一些(没有方法的调用)。 get set可以对输入数据进行验证 public可以乱访问,乱输入,而用属性你可以把握未来,可以对赋入的值进行检查,比如有的数值运算,如果调用的时候输入了abc等字符串,你就可以在程序中把关.可以控制输入输出,这就是封装的最基本的好处. 如果直接声明为public就破坏了面向对象的规则任何代码都可以改变成员变量不安全 楼上基本上说出来了,补充一点:面向对象编程的一个规则是:使用户只需要指定对象能做什么,而不需要去指定或者了解对象是如何完成该工作的。属性是对象内部的数据,用户如果能够直接访问对象内部数据,显然就违反了上述规则。(这也有点类似Windows系统对内存的保护,可以通过API来操作,但不推荐直接访问内存,那样就可能把内存搞乱了。)通过get和set访问器来访问,就保持了这种规则,而且还提供了额外的功能,如对值进行检查,实现只读或只写属性等。 用循环给combobox添加DisplayMember属性? 列出二级,三级分类 为啥我在winform中把用户控件调入主窗体的时候老是提示System.NullReferenceException错误? Asp.NEt 成员管理程序里提供了多少基类 让我们重新配置他的登录控件 如何实现文本框 只能输入字母和数字 ? 求一个正则表达式 求在任意字符串中包含的网址的正则表达式。 救命啊:用C#做的exe读取注册表后,注册表相关内容怎么被自动删除了? 100分 问题大条了 关于一些在C#中模糊的概念? 初学C#问个很简单的语句 请问如何用正则表达式过滤掉html标志?
就破坏了面向对象的规则
任何代码都可以改变成员变量
不安全
面向对象编程的一个规则是:使用户只需要指定对象能做什么,而不需要去指定或者了解对象是如何完成该工作的。属性是对象内部的数据,用户如果能够直接访问对象内部数据,显然就违反了上述规则。
(这也有点类似Windows系统对内存的保护,可以通过API来操作,但不推荐直接访问内存,那样就可能把内存搞乱了。)通过get和set访问器来访问,就保持了这种规则,而且还提供了额外的功能,如对值进行检查,实现只读或只写属性等。