由于其保护水平无法进入?
我对编码仍然很陌生,虽然这个简单的程序只是为了学习构造函数的工作方式,但我仍然想知道为什么我会收到这个错误。
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级别:
- public :访问不受限制。
- protected :访问仅限于从包含类派生的包含类或类型。
- 内部 :访问仅限于当前程序集。
- protected internal:访问仅限于从包含类派生的当前程序集或类型。
- private :访问仅限于包含类型。
C#
中的每个成员都是隐式私有的,因此在您的问题中, a,b
和c
被定义为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
,字段,方法,事件,属性等(基本上, classes
和structures
所有成员)默认为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; } }