我对编码一般都很陌生,虽然这个简单的程序只是为了学习构造函数的工作方式,但我仍然想知道我为什么会这样做这个错误。
ElseIf
我不完全确定为什么我会收到错误。问题在于Console.WriteLine,它声明它无法访问obj.b.变量似乎是在公共类中声明的,为什么不能访问它们呢?我试着寻找解决方案,但是我找到的所有问题对我来说都太复杂了,我得到了一个可以转化为我自己理解的答案。 所有帮助赞赏!
答案 0 :(得分:1)
这是由构造函数引起的不。您收到错误是因为字段methodTest.b
是私有的(在C#中,默认情况下字段是私有的;您需要指定显式修饰符,因此类似public int b;
)。
答案 1 :(得分:1)
访问修饰符是用于指定成员或类型的已声明可访问性的关键字。本节介绍四种访问修饰符:
可以使用访问修饰符指定以下五个辅助功能级别:
C#
中的每个成员都是隐式隐私的,因此在您的问题中,a,b
和c
被定义为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
,字段,方法,事件,属性等(基本上,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; } }
答案 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;}