在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#中用静态类来扩展类的方法,非常实用于代码的封装,以后要尽可能地多用这个技巧。

在C#中用静态类来扩展类的方法的更多相关文章

  1. Kotlin(2): 优雅地扩展类的方法和属性

    欢迎Follow我的GitHub, 关注我的CSDN. 个人博客: http://www.wangchenlong.org/, 最新内容. Kotlin由JetBrains公司推出, 是兼容Java的 ...

  2. Django视图扩展类

    Django视图扩展类 扩展类必须配合GenericAPIView使用扩展类内部的方法,在调用序列化器时,都是使用get_serializer 需要自定义get.post等请求方法,内部实现调用扩展类 ...

  3. C#基础加强(2)之密闭类、静态类及扩展方法

    密闭类 简介 密闭类是被 sealed 关键字修饰的类,密闭类不能有子类.一般只有系统的一些基本类声明为密闭类,例如 String 类. 相关面试题 是否可以编写一个类继承自 String 类? 我们 ...

  4. 第二篇 .NET高级技术之密闭类和静态类及扩展方法

    1.密闭类是修饰为sealed的类, sealed不能有子类.一般只有系统中的一些基本类声明为sealed.面试题:是否可以编写一个类继承自String类? 答:不能,因为string被声明为了sea ...

  5. 【转】C#类的分类(静态类、实例类、嵌套类、结构、简单的抽象类、简单的密封类)

    静态类 -------------------------------------------------------------------------------- 静态类就是在class关键字前 ...

  6. C# 扩展类

    C# 中提供一个非常实用的供能,扩展方法(Extension method) 扩展方法是通过额外的静态方法扩展现有的类型.通过扩展方法,可以对已有类型做自己想做的相关扩展.方法:定义静态类,扩展方法也 ...

  7. C#中的扩展方法(向已有类添加方法,但无需创建新的派生类型)

    C#中的扩展方法 扩展方法使你能够向现有类型"添加"方法,而无需创建新的派生类型.重新编译或以其他方式修改原始类型. 扩展方法是一种特殊的静态方法,但可以像扩展类型上的实例方法一样 ...

  8. C#中的扩展类的理解

    扩展类是一种静态的一种类的调用方法,通过实例化进行调用.利用this进行指正该类,有参数的时候直接在后面追加参数. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 ...

  9. Dubbo源码解析之SPI(一):扩展类的加载过程

    Dubbo是一款开源的.高性能且轻量级的Java RPC框架,它提供了三大核心能力:面向接口的远程方法调用.智能容错和负载均衡,以及服务自动注册和发现. Dubbo最早是阿里公司内部的RPC框架,于 ...

随机推荐

  1. quartz2.x源码分析——启动过程

    title: quartz2.x源码分析--启动过程 date: 2017-04-13 14:59:01 categories: quartz tags: [quartz, 源码分析] --- 先简单 ...

  2. s3c2410 cs8900a 网卡驱动程序

    /* CS8900a.h */ #define CONFIG_CERF_CS8900A 1 /* * cs8900a.c: A Crystal Semiconductor (Now Cirrus Lo ...

  3. QT定时器的两种应用(QObject就有timerEvent事件,一种什么样的居心呢?)

    QT中定时器的使用方法(1)重载timerEvent(QTimerEvent *)函数,然后再在类的构造函数中设置时间间隔   startTimer(50);//单位为毫秒(2)在类的构造函数中设定如 ...

  4. 在asp.net core中使用cookie认证

    以admin控制器为要认证的控制器举例 1.对控制器设置权限特性 //a 认证命名空间 using Microsoft.AspNetCore.Authorization; using Microsof ...

  5. PHP正则表达式入门教程[转]

      思维导图 点击下图,可以看具体内容!     介绍          正则表达式,大家在开发中应该是经常用到,现在很多开发语言都有正则表达式的应用,比如javascript,java,.net,p ...

  6. OO五大原则

    1.单一职责原则 应该有且仅有一个原因引起类的改变 2.里氏替换原则 所有引用基类的地方必须能够透明的使用其子类的对象 3.依赖倒置原则 高层模块不应该依赖底层模块,两者都应该依赖抽象:抽象不应该依赖 ...

  7. PL/SQL 异常处理程序

     异常处理程序 一个好的程序应该能够妥善处理各种错误情况,并尽可能从错误中恢复.ORACLE 提供异常(EXCEPTION)和异常处理(EXCEPTION HANDLER)错误处理 ①有三种类型的 ...

  8. Ubuntu 14.04 64位字体美化(使用黑文泉驿)

    Ubuntu 14.04安装和升级后,,斜体字体变得很难看,昨天,我得到一个晚上,最终,管理一个线索,这里整洁. 在线调研后,.一致的观点是,,使用开源字体库文泉驿理想的黑色字体效果,效果甚至没有丢失 ...

  9. [Android] 环境优化配置Android Studio发展NDK

    ======================================================== 作者:qiujuer 博客:blog.csdn.net/qiujuer 站点:www. ...

  10. linux C 内存管理方式之半动态

    看到半动态申请内存,第一反应这是什么鬼? 实际上半动态内存申请很容易理解,在GNU C中使用alloca函数来实现 #include <stdlib.h> void *alloca (si ...