类构造函数错误

时间:2012-06-30 10:27:28

标签: c# asp.net

因为我们知道构造函数不是像我在上一个问题中提到的那样在子类中继承的Click here to view question

我写了代码

namespace TestConscoleApplication
{
    abstract public class A
    {
       public int c;
       public int d;

    private  A(int a, int b)
       {
           c = a;
           d = b;

       }
        public virtual void Display1()
        {
            Console.WriteLine("{0}{1}", c, d);
        }
    }
    internal class B : A 
    {
      protected  string Msg;

      public B(string Err)

        {
            Msg = Err;

        }

        public  void Display()
        {
            Console.WriteLine(Msg);
        }
    }



    class Program
    {
        static void Main(string[] args)
        {
            B ObjB = new B("Hello");


            Console.ReadLine();
        }
    }
}

当我编译代码时显示错误

  

由于其保护级别,错误TestConscoleApplication.A.A(int, int)无法访问。

然后为什么会出现错误。

4 个答案:

答案 0 :(得分:4)

通过使A私有的构造函数,您已阻止派生类能够在A之外构建。

答案 1 :(得分:1)

派生类构造函数始终调用基础构造函数(其中之一)。使其私密,您禁止从外部访问它。换句话说,你无法在A之外创建A的实例。

由于您创建了构造函数,因此编译器不会为您生成此类的默认公共版本。

如果您想从班级后代而不是从外部提供访问权限,则应将其设为受保护

答案 2 :(得分:0)

您需要A的构造函数可供B访问,并使用它。此外,默认基础构造函数是base()(即无参数构造函数),A上不存在。这是解决此问题的一种方法(删除了非必要位):

abstract public class A
{
    protected A(int a, int b)
    {
    }
}
internal class B : A
{
    public B(int a, int b, string Err)
        : base(a, b)
    {
    }
}

答案 3 :(得分:-1)

构造函数不应该是私有的,否则你将无法创建该类的实例,也无法继承它,但如果你想创建一个私有构造函数,也可以使用它创建一个公共构造函数。 有关详细信息Go here