日期:2014-05-20  浏览次数:20668 次

【请教】关于类与类成员的访问修饰符
大家新春好!虎年的第一个帖子,请大家虎虎地支持一下!

以下疑问,请指教!

  class A // 据MSDN上介绍,类的默认修饰符为internal
  {
  internal void method1()
  {}

  public void method2()
  {}
  }

  上述代码例中,由于类的修饰符默认是internal,所以该类只在本程序集范围内可见,
  并且,method1与method2两个方法的可见范围,也都只能在该程序集内(这点是肯定的吧),
  那么,关于两个方法修饰符的写法上有效率或者安全等方面的考虑么?还是说完全一样任选其一均可呢?

谢谢!

------解决方案--------------------
可以使用: [assembly:InternalsVisibleTo("cs_friend_assemblies_2")]

请参见:
http://msdn.microsoft.com/zh-cn/library/0tke9fxk.aspx
------解决方案--------------------
类的修饰符的访问范围是:private<protected/internal<internal protected<public
根据需要选择修饰符
------解决方案--------------------
此题无关效率与安全。

此题只是一个基本的编程范式的应用---单一职责和开闭原则

对内开放提供多种操作选择,对外封闭只提供单一职责。

调用者只需要知道他应该知道的,其他无关信息应该被隐藏起来


------解决方案--------------------
其实很简单:你声明类成员给谁看?如果给别人(别的模块)看,那么你就要维护它的一致性,不要轻易改变;反之,如果你希望自己随时可以改变,就不要声明给别人(别的模块),以免给外界带来麻烦。

如果这个东西也需要纠结得很复杂,好像多么神秘似地,那么你搞编程就不会举重若轻,而纯粹是把自己累死了。
------解决方案--------------------
其实,这纯粹是“责任感”的问题。当你参与过多人、长时间、许多工程协同开发,就对“责任感”具有了认知。我不认为这些幼稚的东西值得作为死记硬背的八股文、模式,这些知识应该用提升你自己的工作环境来获得,如果没有好的团队那么你可以特意找一些喜欢对需求变来变去的用户来配合,特意从难点出发就能让你对设计细节知道更多。这些原本最初等的东西如果作为教条,难免很极端地去理解,就好象我看到“类成员使用internal更适合吧”这句话时感到被鱼刺卡住了一样。
------解决方案--------------------
探讨
回sp1234:

您回复过我的这篇贴子:
http://hi.csdn.net/link.php?url=http://topic.csdn.net/u/20091225/15/8b660eb4-4c58-4416-91b3-15504aabadec.html

但好像您并没有第二次看看那篇贴子。

如果您喜欢经常以“鄙视”的态度来对待大家(尤其是比您差的人)的问题,那请您以后不要再回复我发的帖子了,不管您的排名有多高(此时您是第56位)技术多强,但我并不喜欢您的态度。

您可能是一个技术牛人,但我觉得您并不是一个懂得如何把项目做得更加规范的人;教条不教条不是您说了算,得由项目的使用者---客户说了算,客户可以是最终用户,也可以是另一个流程的中间开发商。

------解决方案--------------------
我觉得sp1234说得很有道理,学习了……
------解决方案--------------------
这年头,问问题的比回答问题的还有个性

探讨
回sp1234:

您回复过我的这篇贴子:
http://hi.csdn.net/link.php?url=http://topic.csdn.net/u/20091225/15/8b660eb4-4c58-4416-91b3-15504aabadec.html

但好像您并没有第二次看看那篇贴子。

如果您喜欢经常以“鄙视”的态度来对待大家(尤其是比您差的人)的问题,那请您以后不要再回复我发的帖子了,不管您的排名有多高(此时您是第56位)技术多强,但我并不喜欢您的态度。

您可能是一个技术牛人,但我觉得您并不是一个懂得如何把项目做得更加规范的人;教条不教条不是您说了算,得由项目的使用者---客户说了算,客户可以是最终用户,也可以是另一个流程的中间开发商。

------解决方案--------------------
好真的是很好的好啊 啊啊啊啊好的安徽哦啊
------解决方案--------------------
我也不好说什么,我也是菜鸟级别的
但是,有些问题还真的需要提问的人注意,
有些人,对CSDN都有依赖了,动不动就来提问,很多答案上百度,谷歌一搜,一大把的
有些人就是不愿意去搜,想直接要答案
有些人还直接要源码,必须是调试好的,要是调试通不过的还要说三道四的


关于 很容易自己测试的题目,这还用问? 
这句话很正常,没有觉得歧视,也许你多心了


探讨
大家应该将心比心,都是从基础开始的,没必要看不起谁。

我又不是在乱发贴,很可能有不少朋友都会有这些疑问,只是不敢问罢了---怕被“高手”们打压。

个人觉得营造一个长期的平等的良好的交流氛围比什么都重要!

------解决方案--------------------
3、internal/public效率上没区别,可见性的差别能跟安全搭上边吧,一般情况就public好了
4、如果是从商业角度不想让别人知道,应该通过其他手段实现,比如我发布了dll,但是要求加密狗,否则只能试用n次;还有就是通过壳加密,比较适合批量发行,不依赖于个人,但是容易破解;

1、我已经反复强调过:很多人都不习惯认真的读完别人的发言,并认真的理解其中的意思,但作为Coder或Designer这就算是陋习了,如果您不能或者没有耐心做到这点请不要发言;
2、楼上的每个回复都看了一遍,没有一个人直接回答问题;
5、回复别人的问题,同时自己也能收益,所以……