Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何决定一个方法是私有的、受保护的、内部的还是公共的?_C#_.net_Oop - Fatal编程技术网

C# 如何决定一个方法是私有的、受保护的、内部的还是公共的?

C# 如何决定一个方法是私有的、受保护的、内部的还是公共的?,c#,.net,oop,C#,.net,Oop,我正在设计一个类,在这个类中,如果将某些方法公开,它们不会造成任何伤害。但是它们也可以是私有的,因为它们只在我的项目中的同一个类中使用 将其公开具有以下优点: 单元可测试,无需访问器 灵活性 将其私有化有以下好处: 公共文件简化 一些未知的bug没有暴露出来 在这种情况下,一般的指导原则是什么?在这种情况下,我通常会将它们设置为尽可能私有的,然后在需要时提高它们的可访问性(例如,来自其他类的代码可以直接访问这些方法)。将方法添加到API很容易,删除它们(不破坏其他代码)则困难得多。始终尽可能将所

我正在设计一个类,在这个类中,如果将某些方法公开,它们不会造成任何伤害。但是它们也可以是私有的,因为它们只在我的项目中的同一个类中使用

将其公开具有以下优点:

  • 单元可测试,无需访问器
  • 灵活性
  • 将其私有化有以下好处:

  • 公共文件简化
  • 一些未知的bug没有暴露出来

  • 在这种情况下,一般的指导原则是什么?

    在这种情况下,我通常会将它们设置为尽可能私有的,然后在需要时提高它们的可访问性(例如,来自其他类的代码可以直接访问这些方法)。将方法添加到API很容易,删除它们(不破坏其他代码)则困难得多。

    始终尽可能将所有内容私有化


    对于单元测试,我有时将一个成员设置为内部成员,然后使用AssemblyInfo.cs中的
    InternalsVisibleTo
    属性允许单元测试程序集访问内部成员。

    我非常喜欢只公开您明确想要公开的内容。我喜欢我的类提供给我的温暖安全的茧。

    类型的唯一公共成员应该是类型本身的公共接口的一部分。您的目标应该是将该类型的接口最小化到最少的成员数量,并且不向任何底层实现公开任何内容。

    我永远不会公开我的隐私!句号。

    哦,如果您有权访问,请阅读史蒂夫·麦康奈尔的代码完成2第06章。那将完美地回答你的问题

    通常,如果该方法适合类的整体“角色”,则将其公开。从技术上讲,尽量不要破坏抽象。我会举一个例子,但我不知道你的工作背景,所以例子可能是不相关的

    如果您不需要它,就不需要将方法公开

    对于测试,约翰·桑德斯+1

    但我真的不能像史蒂夫在CC2中解释的那样在这里解释你


    我希望在Satckoverflow上发布参考书可以吗?(请发表评论。)

    仅公开您的预期客户端和使用场景所需的内容,仅此而已。我不会将单元测试视为客户机,并进行更改,以便开始不用于公共消费的代码只是为了单元测试而公开访问。如果你这样做,你会把你的api弄得乱七八糟,降低api的可用性,并使将来的更改变得更加困难和不理想,因为现在可能会有客户机代码使用所谓的私有api

    我会检查你是否有更好的选择。例如,您可以在VisualStudio2005和2008中生成私有访问器,使类的非公共api公开用于测试目的。这可能会使您的单元测试代码变得杂乱无章,但对我来说,最重要的是您的设计和向客户(包括您和您的团队)发布的api


    另一方面,我还要提到,单元测试为您提供了一个很好的机会,让您了解您的设计有多好,以及从客户机的角度使用api有多容易。在单元测试开发过程中遇到挫折、问题等,您需要进行更改,以增强api和设计,使其更加简单、美观和可用。

    如果您发现很难彻底测试一个类,那么该类可能做得太多了。使用组合将类拆分可以使单个单元更易于测试


    有时它是有意义的,但有时它不是。只是一个想法。

    听起来像是我老师在编程课上常说的话。“只有你的朋友和班上的其他成员才能触摸你的隐私。”嘿,你不是在一个更老的问题中发布了这个吗?!也许这就是我脑子里想的PI做到了,我会尽快找到答案。我一直更喜欢“只有朋友才能接触彼此的私人成员”。我会这样说:“……只公开需要公开的东西……”;-)为什么有人会试图从API中删除一个方法?他所说的是,如果你一开始就将每个方法公开,那么你以后将很难将一些方法私有化,因为其他一些类可能会使用它们。如果有人想借20美元,你从一开始就告诉他们不要,这比你给他们钱容易得多,10分钟后再要回来。是的,我看到很多参考书。事实上,我经常喜欢包含对书籍很好的参考的问题。这就是为什么我提倡(用C#)不使用显式可见性修饰符。默认设置使所有内容尽可能私有,并且您始终可以添加修改器以使某些内容更可见。所有这些私密的,私密的,私密的只是噪音,让人很难看清什么是私密的。