簡體   English   中英

如何在C#中對繼承的基本構造函數進行操作?

[英]How do I do operations on an inherited base constructor in C#?

public class ClassA
{
    public ClassA(string someString){}
}

public class ClassB : ClassA
{
    public ClassB(string someString):base(someString.ToLower()){}
}

我稱呼繼承的ClassB構造函數。 我傳入了null。 ToLower()在null上引發異常。 我想在此之前檢查是否為空。 我怎樣才能做到這一點?

簡單。 使用空合並運算符

public ClassB(string someString) : 
    base((someString ?? "").ToLower())
{
}

或使用三元運算符

public ClassB(string someString) : 
    base(someString == null ? "" : someString.ToLower())
{
}

更好的是,我建議您向ClassB添加一個無參數的構造ClassB ,該構造ClassB將調用base(string.Empty)

嘗試這個:

base(someString == null ? string.Empty : someString.ToLower())

嘗試這個

public class ClassA
{
    public ClassA(string someString) { }
}

public class ClassB : ClassA
{
    public ClassB(string someString) : base(someString == null  ? "" :  someString.ToLower()) { }
}

您已經對您的問題有了答案,但是我想補充一點,這種方法給我留下了深刻的印象。 確保輸入的小寫字母確實是呼叫者的責任嗎? 我肯定會在基類構造函數中進行此檢查和轉換:

class Base
{
    private string _someString;
    public Base(string someString)
    {
        _someString = someString != null ? someString.ToLower() : null;
    }
}

class Derived : Base
{
    public Derived(string someString) : base(someString) { }
}

這樣,基類不依賴於派生類選擇如何傳遞參數。

您應該檢查基類中someString是否為null並采取相應的措施,否則您可以執行類似的操作,但是我認為它非常難以理解。

public class ClassB : ClassA
{
    public ClassB(string someString):base((String.IsNullOrEmpty(someString)) ? String.Empty : someString.ToLower()){}
}

暫無
暫無

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

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