簡體   English   中英

如何覆蓋List.Add方法?

[英]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.

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