默认情况下是public的构造函数



考试时有人问我这个问题

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, internalprotected)将默认使该成员为私有。

但是,如果您自己不定义任何构造函数,则该类将隐式地获得一个无参数的公共构造函数。如果不是这样,您将不得不为您创建的每个类编写一个空的公共构造函数。

默认构造函数(没有参数的构造函数)在默认情况下是公共的,但在您的代码中您将默认构造函数设置为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',这里有几个细节:

  1. 省略了构造函数的访问修饰符(省略了默认为private的成员的访问修饰符)。这会抛出一个异常,导致'No Output'或'c'

  2. 如果构造函数上的访问修饰符是public,则静态构造函数将首先触发,导致输出为'123100'或'd'。

为了访问你的类,你必须显式地将它标记为public,这样只有你才能从外部访问这个类。

最新更新