繁体   English   中英

C#使用以下命令初始化构造函数

[英]C# initializing a constructor using : this

为什么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)
  {

  }
}

您的构造函数采用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()) { }
}

首先让我们看一下:

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

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

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

但是: obj2 是不是在这一点上有效 :构造函数(这有点包括字段初始化) 尚未运行 ,等等领域this (如this.obj )是不合法的,在该位置。 如Lee所述:只需传入一个nullnew实例。

一个类可以从另一个类继承。 this关键字引用类的实例,并且实例在“开发时”不存在

您不能使用该string并将其传递给另一个使用Class1作为参数的构造函数。 您需要创建一个Class1对象。 但是因为这需要一个int我不会使用带string而是int的构造函数。 否则,您将需要使用int.Parse ,这可能会引发异常,并且异常的构造函数不是很好的做法(在可以避免的情况下)。

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

}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM