0

假设我有这个例子:

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 类?有什么建议么?谢谢

4

3 回答 3

3

请更新您的代码

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

情况是您 B 构造函数尝试调用不存在的 A() 默认构造函数。

于 2012-09-04T12:24:45.407 回答
0

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

public class B(string id, int size) : base(id, size)
  {
    this.Name = "Name2";
    this.Something = new SomethingElse(id, size);
  }
于 2012-09-04T12:30:15.003 回答
0

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

public A(string id,int size):base(param1,param2...paramX)
于 2012-09-04T12:35:33.250 回答