由于其保护水平无法进入?

时间:2015-07-08 20:15:10

标签: c# constructor

我对编码一般都很陌生,虽然这个简单的程序只是为了学习构造函数的工作方式,但我仍然想知道我为什么会这样做这个错误。

ElseIf

我不完全确定为什么我会收到错误。问题在于Console.WriteLine,它声明它无法访问obj.b.变量似乎是在公共类中声明的,为什么不能访问它们呢?我试着寻找解决方案,但是我找到的所有问题对我来说都太复杂了,我得到了一个可以转化为我自己理解的答案。 所有帮助赞赏!

5 个答案:

答案 0 :(得分:1)

这是由构造函数引起的。您收到错误是因为字段methodTest.b是私有的(在C#中,默认情况下字段是私有的;您需要指定显式修饰符,因此类似public int b;)。

答案 1 :(得分:1)

访问修饰符是用于指定成员或类型的已声明可访问性的关键字。本节介绍四种访问修饰符:

可以使用访问修饰符指定以下五个辅助功能级别:

  1. 公开:访问权限不受限制。
  2. 受保护:访问仅限于包含的一个或多个类别 派生自包含类。
  3. 内部:访问仅限于当前程序集。
  4. 受保护内部:访问仅限于当前程序集或 从包含类派生的类型。
  5. 私有:访问仅限于包含类型。
  6. C#中的每个成员都是隐式隐私的,因此在您的问题中,a,bc被定义为private,因此您无法从外部访问它们methodTest。 有关更多信息,您可能需要查看此页面: Access Modifiers (C# Programming Guide)

    祝你好运! :)

答案 2 :(得分:0)

即使变量属于公共类,它们也必须声明为public,因为它们是默认的私有。

请参阅:Access Modifiers

  

类成员,包括嵌套类和结构,可以是公共的,   受保护的内部,受保护,内部或私人。 访问级别   对于类成员和结构成员,包括嵌套类和   结构,默认是私有的

最佳做法是使用大写名称和properties作为公共变量。

public A { get; set; }

属性允许您控制成员读/写的访问权限,以及在读取或设置时添加逻辑。

答案 3 :(得分:0)

您的问题是,在C#中,如果没有使用访问修饰符明确标记变量(在这种情况下,fields),则标记为private

https://msdn.microsoft.com/en-us/library/wxh6fsc7.aspx

类和结构默认为internal,字段,方法,事件,属性等(基本上,classesstructures所有成员)默认为private

int a更改为public int a(以及b / c相同)将解决此问题。

尽管如此,我建议这样做。相反,为每个人创建一个属性。

public A { get { return a; } set { a = value; } }
public B { get { return b; } set { b = value; } }
public C { get { return c; } set { c = value; } }

答案 4 :(得分:0)

如果要从实例化的类外部访问整数a,b和c,则必须将它们声明为public。但是,更清晰的选择是使用属性,例如:

public int A {get; set;}
public int B {get; set}
public int C {get; set;}

这会将您设置为可能限制来自外部类的写入访问,同时仍保持打开属性以进行读取,例如:

public int A {get; private set;}
public int B {get; private set}
public int C {get; private set;}