【问题标题】:In a class, what is the difference between instance variable and variable without modifier in c#在一个类中,实例变量和c#中没有修饰符的变量有什么区别
【发布时间】:2017-09-29 04:28:52
【问题描述】:

在以下代码中:

public class Foo
{
  private object first;  

  object second;

  public void Bar()
  {
    first = "1234";

    second = "1234";
  }
}

两种声明有什么区别?我是 OOP 的新手,想知道有什么区别......

谢谢

【问题讨论】:

  • 没有区别。由于您没有声明访问修饰符,因此它是隐式私有的。见Default Visibility for C#
  • 在您用来学习语言的任何资源中翻到下一页。这就是它告诉你的地方。

标签: c# oop instance-variables


【解决方案1】:

两种声明有什么区别?

没什么,因为这是 C#。一般来说,如果您在 C# 中声明任何内容而不使用访问修饰符,则相当于为该位置使用最私有的有效访问修饰符1

是的,声明

private object first;

等价于

object first;

就我个人而言,我更喜欢明确说明访问修饰符 - 其他人更喜欢尽可能简洁。


1 一个例外是为属性的part 指定访问修饰符。这必须比财产本身更私密;如果您没有在此处指定访问修饰符,则它隐含地与属性本身具有相同的访问权限。

【讨论】:

    【解决方案2】:

    这将被标记为重复,但我还是会回答。

    这两个都是您定义的类的实例变量。只有在创建此类的实例时,它们才会存在于内存中。

    这两个变量之间没有区别。默认情况下,没有访问修饰符的类/结构成员是私有的,明确表示一个是私有的并且不使用修饰符是等价的,但最佳实践是始终指定应该允许您的成员/方法的访问

    【讨论】:

    • "默认情况下,没有访问修饰符的属性是私有的" -- 1) 应该使用术语“成员”而不是 MSDN 中的“属性”;属性在 c# 中完全不同,2) 读取here,只有类和结构成员默认为private,但您的答案没有明确说明这可能会导致问题。
    • @Quantic 为清楚起见进行了编辑。他没有引用枚举或接口,所以我认为我不需要具体说明。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-05-09
    • 2012-12-17
    • 2012-02-08
    • 1970-01-01
    • 2010-10-23
    • 1970-01-01
    相关资源
    最近更新 更多