在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
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#中用靜態類來擴展類的方法,非常實用於代碼的封裝,以后要盡可能地多用這個技巧。