簡體   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