在C#中用靜態類來擴展類的方法


在C#中用靜態類來擴展類的方法

1.待擴展類

        private IList<Person> _personList;

        [SetUp]
        public void Setup()
        {
            _personList = new List<Person>();
            _personList.Add(new Person() { FirstName="Daniel", LastName = "Day-Lewis", YearBorn = 1957 });
            _personList.Add(new Person() { FirstName = "Sally", LastName = "Field", YearBorn = 1946 });
            _personList.Add(new Person() { FirstName = "David", LastName = "Strathairn", YearBorn = 1949 });
            _personList.Add(new Person() { FirstName = "Joseph", LastName = "Gordon-Levitt", YearBorn = 1981 });
            _personList.Add(new Person() { FirstName = "James", LastName = "Spader", YearBorn = 1960 });
        }

從上面代碼看出其通過接口IList定義為List類型。

2.用於擴展的靜態類中的靜態方法

    public static class Extensions
    {
        /// <summary>
        /// creates an epplus worksheet from a list
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="rows"></param>
        /// <param name="name"></param>
        /// <returns></returns>
        public static ExtensionWorksheet<T> ToWorksheet<T>(this IList<T> rows, string name, Action<ExcelColumn> configureColumn = null, Action<ExcelRange> configureHeader = null, Action<ExcelRange> configureHeaderRow = null, Action<ExcelRange, T> configureCell = null)
        {
            var worksheet = new ExtensionWorksheet<T>()
            {
                Name = name,
                Workbook = new ExtensionWorkbook(),
                Rows = rows,
                Columns = new List<ExtensionColumn<T>>(),
                ConfigureHeader = configureHeader,
                ConfigureColumn = configureColumn,
                ConfigureHeaderRow = configureHeaderRow,
                ConfigureCell = configureCell
            };
            return worksheet;
        }
     }

this IList rows表示用this關鍵字來擴展泛型List的方法

3 靜態擴展方法的調用

            var package = _personList.ToWorksheet("Actors");

4 適用場景

很多時候作用效果跟lambda(拉姆達)表達式很類似。就是需要傳入很多參數,或者需要調用很多方法的時候。代碼會變得很多,可讀性會變差,可操作性也會變復雜,擴展性會變差。比如當操作EXCEL導出的時候,樣式會有方法,Mapper數據庫會有方法,保存會有方法,傳入worksheet會有方法,傳入標題會有方法,用了靜態類擴展為list的方法,可讀性會很好,可擴展性好,操作性佳。如果不這么操作,缺點就是需要示例化多個對象方法,然后原生的excel對象還需要在這幾個不同對象的方法之間傳遞,非常的不方便。
如下示例

var bytes = yourListOfT.ToWorksheet("Title", configureHeader: f =>
                                    {
                                        f.Style.Fill.PatternType = ExcelFillStyle.Solid;
                                        f.Style.Fill.BackgroundColor.SetColor(blue);
                                        f.Style.Font.Color.SetColor(Color.White);
                                        f.Style.Font.Name = "Tahoma";
                                        f.Style.Font.Bold = true;
                                        f.Style.Font.Size = 10;
                                        f.Style.VerticalAlignment = ExcelVerticalAlignment.Top;
                                        f.Style.WrapText = true;
                                    }, configureColumn: f => f.AutoFit())
                        .ToXlsx();

5 小結

在C#中用靜態類來擴展類的方法,非常實用於代碼的封裝,以后要盡可能地多用這個技巧。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM