[英]How to override List.Add method?
目前我有一個錯誤記錄類,如下所示:
public class Log
{
public enum LogTypes
{
Info = 1,
Error = 2,
Warning = 3
}
public string Message { get; set; }
public LogTypes LogType { get; set; }
public Log(string Message, LogTypes LogType)
{
this.Message = Message;
this.LogType = LogType;
}
我有一個新列表的初始化器:
List<Log> LogList = new List<Log>();
如何使用LogList.Add(Message, LogType)
代替LogList.Add(new Log(Message, LogType));
?
我知道這是一個小小的改變,但我仍在學習C#,我很好奇。 謝謝!
首先,我不會這樣做。 並不是任何人使用List<Log>
所期望的。 不要暴露普通的List<Log>
,而應考慮創建一個包含 List<Log>
的Logger
類或類似的東西,並公開Log(string message, LogType type)
方法,但實際上不公開List<Log>
。
如果您真的希望能夠直接在列表上調用Add(message, type)
,有兩個選項:
創建從List<Log>
派生的新類:
public LogList : List<Log> { public void Add(string message, LogType type) { Add(new Log(message, type)); } }
請注意,這是重載 (添加新方法簽名但具有相同名稱, Add
),而不是覆蓋 (為virtual
方法的現有簽名方法提供新行為) - 並且您需要創建LogList
的實例而不是List<Log>
:
LogList list = new LogList(); list.Add(message, type);
向List<Log>
添加擴展方法,這將有效地將該方法添加到所有 List<Log>
實例。
public static LogListExtensions { public static void Add(this Log<List> list, string message, LogType type) { list.Add(new Log(message, type)); } }
另外,我可能還會從您的Log
類型中刪除setter - 為什么您需要能夠在構建后更改消息或類型?
您可以創建自己的List
派生類,並根據需要定義新的Add
方法,例如:
public class MyListClass : List<Log>
{
public void Add(string message, Log.LogTypes logType)
{
this.Add(new Log(message, logType));
}
}
除了保存第二或第二次打字之外,它沒有任何區別。 說過你總是可以實現自己的列表類並使用它。 或者您可以使用擴展方法。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.