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

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

using System; public class methodTest { int a; int b; int c; public methodTest(int i, int j, int k) { a = i; b = j; c = k; } } public class methodObj { static void Main() { methodTest obj = new methodTest(10, 20, 30); Console.WriteLine("obj = " + obj.b); Console.ReadKey(); } } 

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

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

请参阅: 访问修饰符

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

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

 public A { get; set; } 

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

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

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

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

  1. public :访问不受限制。
  2. protected :访问仅限于从包含类派生的包含类或类型。
  3. 内部 :访问仅限于当前程序集。
  4. protected internal:访问仅限于从包含类派生的当前程序集或类型。
  5. private :访问仅限于包含类型。

C#中的每个成员都是隐式私有的,因此在您的问题中, a,bc被定义为private ,因此您无法从methodTest外部访问它们。 有关更多信息,您可能需要查看此页面: 访问修饰符(C#编程指南)

祝好运! 🙂

如果要从实例化的类外部访问整数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;} 

您的问题是,在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; } }