這個問題在這里已經有了答案: value 的默認引數必須是編譯時間常數? (7 個回答) 昨天關門。
這篇文章昨天被編輯并提交審查。
我正在嘗試構建一個將以多種不同方式使用的“Action”抽象類。就我而言,動作只是一個簡單的可重復任務,由各種“觸發器”呼叫。我還創建了一個“ActionArgs”類,用作一個結構來保存要執行的動作的引數。默認的“ActionArgs”物件不包含任何引數,旨在充當默認值。但是,我希望能夠創建從各自父級繼承的“Action”和“ActionArgs”,但我始終希望基本的空 ActionArgs 物件充當可選引數的默認值,因為某些 Action 將具有引數,其他也許不會。我在實作這一目標時遇到了問題。我已經嘗試了一些東西,但這就是我想要的:
public abstract class Action
{
public string Name { get; private set; }
public Action(string name) { Name = name; }
public abstract bool PerformAction(ActionArgs args = ActionArgs.Empty);
}
public class ActionArgs
{
public static readonly ActionArgs Empty = new ActionArgs();
public ActionArgs() { }
}
在嘗試此操作時,我在 PerformAction() 定義中遇到錯誤,表示默認引數值必須是編譯時常量。為什么這不可能在編譯時解決?我猜這是因為它假設最壞的情況是您在建構式中有一些運行時變化。在我的情況下,我顯然沒有,但是有什么方法可以以不涉及使用null默認引數的方式來解決這個問題?
uj5u.com熱心網友回復:
我會使用方法多載:
public abstract class Action
{
public string Name { get; private set; }
public Action(string name) { Name = name; }
public bool PerformAction() => PerformAction(ActionArgs.Empty);
public abstract bool PerformAction(ActionArgs args);
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/486317.html
上一篇:只插入不存在的行
