构造函数是默认公开的吗?

时间:2016-09-17 14:14:44

标签: c# constructor

我在考试时被问到这个问题

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
  • b)123
  • c)无输出
  • d)1231000

我检查a)这是错的。

当我运行该程序时,我收到一条错误消息,指出由于其保护级别而无法访问ConsoleApplication1.main.main()。

默认情况下构造函数不应该公开吗?为什么我会收到此错误?

4 个答案:

答案 0 :(得分:3)

在任何成员(构造函数,字段,属性,方法,事件等)上省略access modifierpublicprivateinternalprotected) 。)默认情况下会将会员保密。

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

答案 1 :(得分:2)

默认构造函数(没有参数的构造函数)默认是公共的,但在您的代码中,您将构建默认构造函数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很好,因为你的程序会抛出异常。

答案 2 :(得分:1)

没有访问修饰符的构造函数将是默认的私有,因此您获得了不可访问性错误。

答案 3 :(得分:-2)

为了访问你的课程,你必须明确地将其标记为公开,然后只有你能够访问课程,希望它有所帮助