考试时有人问我这个问题
class main
{
static long afield = 123;
static main()
{
Console.WriteLine(afield);
}
main()
{
afield = 1000;
Console.WriteLine(afield);
}
}
static void Main(String[] args)
{
main obj = new main();
}
输出是什么
- a) 1000123 123年
- b)
- c)无输出
- d) 1231000
我检查了a),它是错误的。
当我运行程序时,我得到一个错误,指出ConsoleApplication1.main.main()由于其保护级别而无法访问。
默认情况下构造函数不应该是公共的吗?为什么会出现这个错误?
在任何成员(构造函数,字段,属性,方法,事件等)上省略访问修饰符(public
, private
, internal
或protected
)将默认使该成员为私有。
但是,如果您自己不定义任何构造函数,则该类将隐式地获得一个无参数的公共构造函数。如果不是这样,您将不得不为您创建的每个类编写一个空的公共构造函数。
默认构造函数(没有参数的构造函数)在默认情况下是公共的,但在您的代码中您将默认构造函数设置为PRIVATE。因此,它们在代码的其他部分是不可访问的。
class main
{
static long afield = 123;
public static main()
{
Console.WriteLine(afield);
}
public main()
{
afield = 1000;
Console.WriteLine(afield);
}
}
static void Main(String[] args)
{
main obj = new main();
}
把它公开,一切都会好的。
在这种情况下,C是一个很好的答案,因为你的程序会抛出异常
没有访问修饰符的构造函数将被默认为私有的,因此您得到的不可访问错误
至少要回答为什么考试问题的答案不是'a',这里有几个细节:
-
省略了构造函数的访问修饰符(省略了默认为private的成员的访问修饰符)。这会抛出一个异常,导致'No Output'或'c'
-
如果构造函数上的访问修饰符是public,则静态构造函数将首先触发,导致输出为'123100'或'd'。
为了访问你的类,你必须显式地将它标记为public,这样只有你才能从外部访问这个类。