C#使用:this初始化构造函数

时间:2012-12-07 08:30:34

标签: c#

为什么this不接受类类型的参数?我能读到什么?这是我无用的代码

using System;

public class Class1
{
  public int a = 5;
}

public class Class2
{
  private readonly int num;
  Class1 obj2 = new Class1();
  public Class2(Class1 obj)
  {
    num = obj.a;
  }
  public Class2(string l) : this (Class1 obj2)
  {

  }
}

4 个答案:

答案 0 :(得分:3)

您的构造函数采用Class1的实例,因此您应该使用:

public Class2(string l) : this (new Class1())
{
}

您可能还想将构造函数参数分配给obj2成员而不是创建新成员:

public class Class2
{
    private readonly int num;
    Class1 obj2;
    public Class2(Class1 obj)
    {
        this.obj2 = obj;
        num = obj.a;
    }
    public Class2(string l) : this (new Class1()) { }
}

答案 1 :(得分:2)

首先让我们来看看:

public Class2(string l) : this (Class1 obj2) {...}

首先,您不在调用中包含类型,因此它将是:

public Class2(string l) : this (obj2) {...}

但是:obj2 在那时无效:构造函数(包括字段初始值设定项)尚未运行,因此{ {1}}(例如this)在该位置不合法。正如李指出的那样:只需传入this.objnull个实例。

答案 2 :(得分:0)

一个类可以从另一个类继承。 this关键字引用类的实例,而实例在“develop-time”

中不存在

答案 3 :(得分:0)

您不能使用string并将其传递给另一个以Class1为参数的构造函数。您需要创建一个Class1对象。但是因为那需要int我不会使用string而是int的构造函数。否则你需要使用int.Parse可以抛出一个摘要,而异常的构造函数不是很好的做法(当它们可以避免时)。

public Class2(int i)
    : this(new Class1() { a=i })
{

}