【问题标题】:Initialize an inherited class初始化继承的类
【发布时间】:2012-08-30 17:35:42
【问题描述】:

我有一个类(我们称之为 Class1),它继承了另一个类(Class2)。 我要做的是在 Class1 中继承时在 Class2 中运行 costructor 方法。

我想它必须看起来像这样:

// Class1
public class Class1 : Class2
{
    public Class1()
    {

    }
}
// Class2
public class Class2
{
    public Class2()
    {
        //this is the function I want to run
    }
}

但我无法让它像这样工作。
有没有办法做到这一点,而实际上不必从 Class1 调用 Class2() 构造函数?

【问题讨论】:

  • 构造函数不是方法或函数,它们只是构造函数。

标签: c# class initialization


【解决方案1】:

您错误地声明了您的构造函数。去掉void关键字:

// Class1 
public class Class1 : Class2 
{ 
    public Class1() 
    { 

    } 
} 
// Class2 
public class Class2 
{ 
    public Class2() 
    { 
        //this is the function I want to run 
    } 
} 

基类的默认构造函数会自动运行。如果你想调用一个非默认的构造函数,你可以这样做:

// Class1 
public class Class1 : Class2 
{ 
    public Class1() : base("argument")
    { 

    } 
} 
// Class2 
public class Class2 
{ 
    public Class2() 
    { 
    } 
    public Class2(string theParameter)
    {
        //code for initializing the object with the string parameter 
    }
} 

【讨论】:

  • 抱歉,我的代码中就是这样。我只是不假思索地将它们添加到这里。但这对我不管用。
  • @GabiBarrientos 你怎么知道它不起作用?您发布的代码(带有void 关键字)将无法编译。您的代码是编译失败,还是编译但没有按预期工作?
  • 因为我试图运行 Debug.WriteLine("test");在 Class2 的构造函数中。但是使用您写下的第二段代码实际上对我有用。谢谢。我会接受这个作为我的答案,但我需要等待几分钟
【解决方案2】:

你总是调用Class2 的构造函数。如果您没有调用 base() 的代码,它会为您添加。如果Class2 没有无参数构造函数,并且您没有显式调用基本构造函数,则会出现编译错误。

如果你有一个Class1,那么你必须已经构造了一个Class2;如果没有Person,你就不能拥有C_Sharp_Developer

【讨论】:

  • 第一段应该以“...你得到一个编译器错误”结尾。 (而且,仔细想想,条件应该是“如果Class2 没有可访问无参数构造函数...”)
  • @phoog 我更改了“编译错误”位,因为这就是我要写的。我将留下关于可访问性的观点,以便您的评论可以作为您的想法,而我没有这样做;)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-10-21
  • 1970-01-01
  • 2018-01-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多