如果它是多余的,你应该使用私人访问修饰符吗?

jon*_*nii 50 c# coding-style

鉴于这两个例子是等价的,您认为哪些是可取的?

没有显式修饰符

public class MyClass
{

    string name = "james";

    public string Name {
        get { return name; }
        set { name = value; }
    }

    void SomeMethod() { ... }

}
Run Code Online (Sandbox Code Playgroud)

使用显式修饰符

public class MyClass
{

    private string name = "james";

    public string Name {
        get { return name; }
        set { name = value; }
    }

    private void SomeMethod() { ... }

}
Run Code Online (Sandbox Code Playgroud)

我一直使用后者,但最近我开始采用前一种风格.私有是多余的,因为它是默认的访问者修饰符,所以排除它是否有意义?

Nic*_*uso 63

我认为明确说明私人有助于提高可读性.它不允许程序员以不同的方式解释其可见性.

  • 没关系新的程序员 - 显式几乎总是更好.不要让我思考.:) +1给这个答案. (15认同)
  • 在C#规范中很明显,类的默认修饰符是私有的.这也是采访中常见的问题. (10认同)
  • @Dalin:它对于类型(包括嵌套类型)的成员是私有的,对于顶级类型是内部的. (3认同)
  • @Will Eddins,你可以"意外地"忽视能见度,这表明成员不需要公开.如果他们这样做了,你就会在需要公开的环境中使用它们.这就是为什么最好省略可见性,以便在*需要*之前看不到东西. (2认同)

Olm*_*lmo 44

看起来我们是唯一一个,但就个人而言,我支持让我们删除私人广告系列.

我担心的是公共和私有是如此相似,6-7个字符长,蓝色,以'p'开头,所以在10个显式私有方法之间指定一个公共方法要比没有访问属性的10个方法更难.

此外,这是一个优势,因为你团队中的懒人倾向于节省编写修饰符并使方法保密,这实际上是一件好事.否则你最终会公开一切.

我通常更喜欢明确的过度隐含,但这在语言角落案例(棘手的作弊)中更为重要.在这里,我认为长阶可维护性更重要.

此外,我通常喜欢代码在代码明确时以数学方式简单明了,以便保留未来编码器的无知.这是VB的方式,而不是C#...

  • 确实如此,因为它们是访问*修饰符*。为什么要在实际上没有“修改”的情况下添加修饰符? (5认同)
  • 如果你不喜欢它们都是蓝色的,让你的编辑器给它们涂上不同的颜色 (4认同)
  • 更短更优雅.需要明确混乱的民谣,如"私人",额外的括号和不必要的操作员应该学习语言. (4认同)
  • 我们应该开始一个支持小组! (3认同)
  • 我在同一个营地,虽然我不介意私人使用.我的主要原因是C#代码行通常很长(领先的缩进空间,长类型名称等).删除私有使其更短.而且一大块私人成员看起来像传统的C程序一样简洁. (3认同)

Mar*_*ell 25

将它标记为私有表明它是故意的,而不是"我实际上没有想到它,所以我不知道它是否会像其他东西一样更好."; 所以我喜欢说明一点.不过,我不会对此有所了解.

此外 - 这可以防止必须记住规则...默认情况下成员是私有的,默认情况下(外部)类型是内部的; 嵌套类型默认是私有的...

说清楚......明确说明;-p

  • 但这些规则很容易记住.你可以重申它们"尽可能少见一切".或者"一切都是私密的,除非它不能"(外部类型不能因为那时没有什么可以使用它们).记住默认值并不难. (11认同)

Rya*_*ndy 21

我总是省略它以减少视觉混乱.在C#中,一切都默认为可见度最低.类成员(字段,方法,属性)默认为private.类默认为internal.嵌套类默认为private.

如果您需要明显的内容,请添加修改器.这样可以轻松查看偏离默认可见性的项目.

我能看到它导致问题的唯一情况是你来自VB .NET背景.但是,嘿,我来自VB .NET背景,我仍然知道C#中的默认可见性.

另一方面,在VB .NET中,我几乎总是包含它,因为默认值是相当愚蠢的; Sub或Function的默认值__CODE__而不是__CODE__.


Rob*_*ney 11

我已经在C#中全职开发了大约7年,直到我读到这个主题,我不知道默认访问修饰符是什么.我知道有一个存在,但我从未使用它.

我喜欢在编码时明确声明我的意图.两者都是因为当我回去看它的时候,我可以看到这些声明,并且当我写一个方法时,实际上在思考并输入"私人"这个词让我想到了我对它的想法.做.

  • "我现在已经在C#中全职开发了大约7年,直到我读到这个主题,我才知道默认访问修饰符是什么." - >这需要一些胆量承认:) (13认同)

Mar*_*ett 7

就个人而言,我更喜欢私人修饰符 - 我喜欢显性.对于字段,它还强调它是一个成员变量而不是一个函数变量(唯一的区别就是位置 - 如果人们可以正确地缩进,这是可以的,但是否则会令人困惑).


And*_*nea 6

我喜欢通常超级明白.我会一直指定"私人".然而,还有另一个原因:程序员来自编程语言,默认可见性不是私有的,而是公共的,例如PHP.


Noa*_*ich 5

我总是喜欢明确,即使它是多余的.这提供了内置的代码注释,可以帮助下一个人,特别是如果他是一个菜鸟.:-)