簡體   English   中英

如何將基類作為輸入參數傳遞給派生類的構造函數?

[英]How to pass a base class as input parameter to the constructor of the derived class?

我有一個派生類,它是從基類派生的,

public class DerivedClass : BaseClass
{
    public DerivedClass () {}
    public DerivedClass ( BaseClass bc )
    {
        // The following line is invalid, but I want to achieve something like this
        this = bc;
        // Error: (this) Cannot assign <This> because this is read only 
        // Error2: (bc) Cannot implicitly convert Type `BaseClass` to `DerivedClass`
    }
}

public class BaseClass
{
    public string TestName { get; set; }
    public uint TestNumber { get; set; }

    public BaseClass () { }
}

然后從Main方法

static void Main ( string[] args )
{
     BaseClass bc = new BaseClass ();
     bc.TestName = "dummy test";
     bc.TestNumber = 007;

     DerivedClass dc = new DerivedClass ( bc );
 }

現在我的問題是

  1. 如何通過派生類分配基類屬性,請注意,它必須通過派生類的構造函數來實現(如代碼所示: this = bc; )?
  2. 如果不是,這是正確的編碼實踐嗎?

謝謝!

this是只讀別名-記住以后您可以這樣做

public class DerivedClass : BaseClass
{
    public DerivedClass () {}
    public DerivedClass ( BaseClass bc )
    {
        TestName=bc.TestName;
        TestNumber=bc.TestNumber;
    }
}

如果不是,這是正確的編碼實踐嗎? 取決於您嘗試實現的目標

您無法做到這一點,您不能在引用當前實例的構造函數中使用this ,因為您將要立即構造該對象。 我將提供適當的構造函數:

public class DerivedClass : BaseClass
{
    public DerivedClass() { }
    public DerivedClass(string TestName, uint TestNumber)
    {
        base.TestName = TestName;
        base.TestNumber = TestNumber;
    }
    public DerivedClass(BaseClass bc) : this(bc.TestName, bc.TestNumber) { }
}

因此,如果您根本沒有在示例中使用BaseClass變量,則根本不需要它。 創建基礎對象只是初始化子類對象是沒有意義的。

這是一個壞習慣。

那意味着您的基類已經代表了任何派生類。

我建議組成:

public class TestData
{
    public string TestName { get; set; }
    public uint TestNumber { get; set; }
}

public class BaseClass
{
    protected TestData data;
    public BaseClass(TestData data)
    {
        this.data = data;
    }
}

public class DerivedClass : BaseClass
{
    public DerivedClass(TestData data)
       : base(data)
    {
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM