请问在类里声明成员为private并设置get,set方法和直接将其声明为public有什么区别? rt,听说声明为public安全性不够好,但有get,set方法不也一样吗?高手解惑! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 一般来说设为属性(set,get)要地道一些,首先你在赋值或取值的时候可能会作一些业务相关的检查和判断,也可能进行一些内部的操作,不过这些操作在外面看起来都是透明的。不过如果你确定不需要这样的操作,也可以直接把成员声明为public,毕竟这样效率还高一些(没有方法的调用)。 get set可以对输入数据进行验证 public可以乱访问,乱输入,而用属性你可以把握未来,可以对赋入的值进行检查,比如有的数值运算,如果调用的时候输入了abc等字符串,你就可以在程序中把关.可以控制输入输出,这就是封装的最基本的好处. 如果直接声明为public就破坏了面向对象的规则任何代码都可以改变成员变量不安全 楼上基本上说出来了,补充一点:面向对象编程的一个规则是:使用户只需要指定对象能做什么,而不需要去指定或者了解对象是如何完成该工作的。属性是对象内部的数据,用户如果能够直接访问对象内部数据,显然就违反了上述规则。(这也有点类似Windows系统对内存的保护,可以通过API来操作,但不推荐直接访问内存,那样就可能把内存搞乱了。)通过get和set访问器来访问,就保持了这种规则,而且还提供了额外的功能,如对值进行检查,实现只读或只写属性等。 C#的代码中写有汉字会有什么利弊? 【帮顶有分】问个socket通信中能取出报文特定字节值的问题! 用c#和ASP.NET做网站的问题。 excel 5.0 的c# 创建 excel文件 web页面中怎样将查询的结果导出到可编辑的Excel要求源码提供!!asp.net 新人,散分1分钟结帖 Delphi+Java=C#各位有什么高见? 关于插件模式的实现。 system.io.FileLoadexception defaultDomain的问题。 修改注册表 初学C#问个很简单的语句 请问如何用正则表达式过滤掉html标志?
就破坏了面向对象的规则
任何代码都可以改变成员变量
不安全
面向对象编程的一个规则是:使用户只需要指定对象能做什么,而不需要去指定或者了解对象是如何完成该工作的。属性是对象内部的数据,用户如果能够直接访问对象内部数据,显然就违反了上述规则。
(这也有点类似Windows系统对内存的保护,可以通过API来操作,但不推荐直接访问内存,那样就可能把内存搞乱了。)通过get和set访问器来访问,就保持了这种规则,而且还提供了额外的功能,如对值进行检查,实现只读或只写属性等。