构造函数重写同一类中的另一个构造函数:错误

时间:2017-11-02 14:10:24

标签: c# constructor override

我有两个构造函数,在同一个类中,有多个参数(Visual Studio上的c#):

public class Example
{
 {
 public string arg1 { get; set; }
 public string arg2 { get; set; }
 public string arg3 { get; set; }
 public string arg4 { get; set; }
 public string arg5 { get; set; }
 public string arg6 { get; set; }
 }

public Example(string arg1, string arg2, string arg3){
this.arg1 = arg1;
this.arg2 = arg2;
this.arg3 = arg3;
}

public Example(string arg4, string arg5, string arg6){
this.arg4 = arg4;
this.arg5 = arg5;
this.arg6 = arg6;
 }
}

在一个单独的aspx.cs文件中,在受保护的字符串方法下,我根据条件调用这两个构造函数。

Example ExampleObj = null;

protected string Method(object sender, EventArgs e){

 if (condition){
  ExampleObj = Constructor2(parameter1, parameter2, parameter3, parameter4, parameter5, parameter6);
 }
 else
 {
  ExampleObj = Constructor1(parameter1, parameter2, parameter3);
 }

}

如果condition为true,我想调用第二个构造函数,除了Constructor1中的参数之外还有参数。我想,我可以说构造函数2覆盖或扩展构造函数1。 经过我所有的研究,我试过了

public Constructor2(string arg4, string arg5, string arg6)
:this(arg1, arg2, arg3) {
 this.arg4 = arg4;
 this.arg5 = arg5;
 this.arg6 = arg6;
}

仍然,我收到错误'这个()中的参数需要一个对象引用。根据我的要求,我不能使我的主要方法静态。我找到了一些解决方案,说创建实例或更改为静态,但我无法将其应用于我的代码(获取错误)。

另外,我不清楚我是否应该在this()构造函数中声明数据类型。如果有人知道解决方法,请帮助我。我可能会遗漏一些东西。

谢谢!

2 个答案:

答案 0 :(得分:2)

有效的构造函数应该与该类具有相同的名称。

您可以拥有2个构造函数,但它们需要具有相同的名称和不同的参数列表。否则,编译器在使用它们时无法区分它们。

这项工作正常:

  class Example
  {
    public Example(string arg1)
    { 
      this.arg1 = arg1;
    }

    public Example(string arg1, string arg2)
        :this(arg1) 
    {
      this.arg2 = arg2;
    }
  }

答案 1 :(得分:0)

c#编译器无法区分两个构造函数,因为它们具有相同的签名(方法名称,参数的数量和类型)。如果每个构造函数有不同数量的参数,或者如果任何参数的类型不同,则代码将编译。

我猜你正在寻找这样的东西:

public class Example
{
    public string arg1 { get; set; }
    public string arg2 { get; set; }
    public string arg3 { get; set; }
    public string arg4 { get; set; }
    public string arg5 { get; set; }
    public string arg6 { get; set; }

    public Example(string arg1, string arg2, string arg3)
    {
        this.arg1 = arg1;
        this.arg2 = arg2;
        this.arg3 = arg3;
    }

    public Example(string arg1, string arg2, string arg3, string arg4, string arg5, string arg6)
         : this(arg1, arg2, arg3)
    {
        this.arg4 = arg4;
        this.arg5 = arg5;
        this.arg6 = arg6;
    }
}