子类构造函数有些麻烦

时间:2012-09-04 12:23:13

标签: c# .net inheritance constructor

我想说这个例子:

class A : SomeAbstractClassWithProperties
{
  public A(string id, int size)
  {
    this.Name = "Name1";
    this.Something = new SomethingElse(id, size);
  }

  //...some stuff
}

class B : A
{
  public B(string id, int size)
  {
    this.Name = "Name2";
    this.Something = new SomethingElse(id, size);
  }
}

好的,这不会起作用:

Inconsistent accessibility: base class A is less accessible than class 'B'
'A' does not contain a constructor that takes 0 arguments

但是我们看到 A类 B类的构造函数几乎相同。只是 this.Name 是不同的。我怎么能重写 B类?有什么建议?谢谢

3 个答案:

答案 0 :(得分:3)

请更新您的代码

class B : A
{
  public class B(string id, int size) : base(id, size) 
  { 
     this.Name = "Name2";
  }
}

案例是你B构造函数试图调用一个不存在的A()默认构造函数。

答案 1 :(得分:0)

您应该将默认(不带参数)构造函数添加到类A或修改类B的构造函数,如此

public class B(string id, int size) : base(id, size)
  {
    this.Name = "Name2";
    this.Something = new SomethingElse(id, size);
  }

答案 2 :(得分:0)

当你创建B的实例时,由于B从A扩展,你也可以调用A的构造函数。 由于您要为A类定义构造函数,因此您不再具有默认的无参数构造函数,因此您必须在B构造函数中调用A的构造函数来传递所需的参数。

public A(string id,int size):base(param1,param2...paramX)