[英]Inaccessible due to its protection level?
总的来说,我对编码还是很陌生,虽然这个简单的程序只是为了测试构造函数的工作原理,但我仍然想知道为什么我会收到这个错误。
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。 变量似乎是在公共类中声明的,为什么不能访问它们? 我尝试寻找解决方案,但我发现的所有问题都太复杂了,我无法得到可以转化为我自己理解的答案。 所有帮助表示赞赏!
访问修饰符是用于指定成员或类型声明的可访问性的关键字。 本节介绍四种访问修饰符:
可以使用访问修饰符指定以下五个可访问性级别:
C#
中的每个成员都是隐式私有的,因此在您的问题中, a,b
和c
被定义为private
,因此您无法从methodTest
外部访问它们。 有关更多信息,您可能需要查看此页面:访问修饰符(C# 编程指南)
祝你好运! :)
这不是由构造函数引起的。 您收到错误是因为字段methodTest.b
是私有的(在 C# 中,字段默认是私有的;您需要指定一个显式修饰符,例如public int b;
)。
您的问题是,在 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; } }
如果您想从它们被实例化的类之外访问您的整数 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;}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.