扩展方法简介
扩展方法使你能够向现有类型“添加”方法,而无需创建新的派生类型、重新编译或以其他方式修改原始类型。 扩展方法是一种特殊的静态方法,但可以像扩展类型上的实例方法一样进行调用。 对于用 C#、F# 和 Visual Basic 编写的客户端代码,调用扩展方法与调用在类型中实际定义的方法没有明显区别。

详见微软官方文档的定义和使用说明:扩展方法(C# 编程指南)

编写方法
定义一个测试用的类,并包含一个成员方法:

public class Module
{
public void Func1()
{
// TODO..
}
}

  

定义一个静态类,编写一个静态方法,用于扩展Module类:

public static class TestExtension
{
public static void Func2(this Module mod)
{
// TODO..
}
}

  

调用测试:

public void Test()
{
var mod = new Module();
mod.Func1();
mod.Func2();
}

  

扩展方法的注意点:
* 需要写在一个静态类中
* 必须是一个静态方法
* 通过第一个参数和this关键字指定扩展的目标类型
* 不同类型的扩展方法不一定要写在同一个类中

如上所示,对Module类进行扩展后,可以和调用原生方法一样,调用扩展方法,在上层使用感受不到区别。通过这种方式,可以很好的对C#原生的类型,和不开源的第三方库,增加额外需求的、符合自己书写习惯的或者有效提高项目开发效率的新接口。

自己项目中实例

1.定义主体

    public class ResChildBase
{
[Key]
[ForeignKey("ResBaseInfo")]
[Column(TypeName = "char(36)")]
public Guid ID { get; set; } public virtual ResBaseInfo ResBaseInfo { get; set; } /// <summary>
/// 多语言的详情描述集合
/// </summary>
[NotMapped]
public List<Description> DescriptionCollection { get; set; } /// <summary>
/// 获取某个语言的详情描述(这种是传统的方式,定义到方法上。但对于类库中的类无法操作)
/// </summary>
/// <param name="lang">多种语言的枚举</param>
/// <returns></returns>
public Description CurDescription(Lang lang) {
return DescriptionCollection.Find(g=>g.Language.Equals(lang));
}
}

  2.书写扩展方式

    public static class EntityExtension
{
/// <summary>
/// 获取指定语言的详情
/// </summary>
/// <param name="list"></param>
/// <param name="lang">枚举类型的语言</param>
/// <returns></returns>
public static Description GetDesc(this List<Description> list, Lang lang)
{
return list.Find(g=>g.Language.Equals(lang));
} /// <summary>
/// 获取指定语言的详情
/// </summary>
/// <param name="list"></param>
/// <param name="lang">字符串类型的语言</param>
/// <returns></returns>
public static Description GetDesc(this List<Description> list, string lang)
{
return list.Find(g => g.Language.ToString().Equals(lang));
}
}

  3.使用

//hotel是继承自ResChildBase的子类
Description des= hotel.CurDescription(Lang.CN); //或者
//在这个View中,Model的类型是继承自ResChildBase的子类
@await Html.PartialAsync("~/Views/Description/_DescriptionDetailView.cshtml", Model.DescriptionCollection.GetDesc("CN"))

  

【转】C# / Extension 扩展方法的更多相关文章

  1. Flutter——Dart Extension扩展方法的使用

    dart的extension方法可以给已经存在的类添加新的函数,通过extension我们可以封装一些常用方法,提高开发效率. 例一:扩展String 给string添加一个log打印方法 exten ...

  2. [C#] Extension Method 扩展方法

    当我们引用第三方的DLL.或者Visual Studio自己的库的时候,或许会发现这样的一个情况,如果这个类型有一个XX的方法就好了.这时候我们可以用到扩展方法,是我们的代码更加灵活和高效. 这里我举 ...

  3. C# -- 扩展方法的应用(Extension Methods)

    当你有下面这样一个需求的时候,扩展方法就会起到作用:在项目中,类A需要添加功能,我们想到的就是在类A中添加公共方法,这个显而易见肯定可以,但是由于某种原因,你不能修改类A本身的代码,但是确实又需要增加 ...

  4. C# Note21: 扩展方法(Extension Method)及其应用

    前言 今天在开会时提到的一个概念,入职3个多月多注重在项目中使用C#的编程知识,一直没有很认真地过一遍C#的全部语法,当我们新人被问及是否了解Extension Method时,一时之间竟不能很通俗准 ...

  5. [译文]c#扩展方法(Extension Method In C#)

    原文链接: https://www.codeproject.com/Tips/709310/Extension-Method-In-Csharp 介绍 扩展方法是C# 3.0引入的新特性.扩展方法使你 ...

  6. (转)C# -- 扩展方法的应用(Extension Methods)

    本文转载自:http://blog.csdn.net/zxz414644665/article/details/9793205 当你有下面这样一个需求的时候,扩展方法就会起到作用:在项目中,类A需要添 ...

  7. Extension Methods(扩展方法)

    在 OOPL 中,有静态方法.实例方法和虚方法,如下:   public sealed class String {      public static bool  IsNullOrEmpty(st ...

  8. [0] C# 扩展方法(Extension Method)

    有时有这样的情况,有一个类,你不能修改它,但你又想对它扩展(添加一个方法),这个时候就可以用到扩展方法了.请看下面的例子: using System;using System.Collections. ...

  9. c#编程指南(五) 扩展方法(Extension Method)

    C# 3.0就引入的新特性,扩展方法可以很大的增加你代码的优美度,扩展方法提供你扩展.NET Framewoke类的扩展途径,书写和规则也简单的要命. 编写扩展方法有下面几个要求: 第一:扩展方法所在 ...

随机推荐

  1. 13 个 C# 10 特性

    原文链接:https://blog.okyrylchuk.dev 原文作者:Oleg Kyrylchuk 译: 等天黑 常量的内插字符串 C# 10 允许使用在常量字符串初始化中使用插值, 如下 co ...

  2. vmware虚拟IOS系统

    安装虚拟机     --以管理员的身份运行

  3. Linux环境下Django App部署到XAMPP上

    Django App部署到XAMPP上 准备工作 首先一定要保证自己的代码在本地可以运行! 同时在服务器上把需要的库,什么数据库之类的都装好! 源码安装mod_wsgi 从mod_wsgi的gitgu ...

  4. 低成本CH7511芯片方案|CH7511电路设计参考|CS5211替代CH7511

    CH7511是主要用于设计eDP转LVDS转换器,怎么样设计一款低成本低BOM简单的DP转LVDS的转接设置,目前有一款可以替代兼容CH7511的方案电路,并且其设计电路整体BOM成本较低,并且设计简 ...

  5. Windows环境下使用Linux命令

    1.说明 如何在Windows环境下使用Linux命令, 这是一个屡见不鲜的问题, 而且已经有很多解决方法, 下面仅推荐几个我觉得好用的工具, 这些工具可能就是我们常用的软件, 而且已经在Window ...

  6. html基础 字符实体 用于html中特殊符号的展示 比如:多个空格、代码展示

    结构:&+英文: 常见的字符实体  

  7. 初识python 之 爬虫:爬取豆瓣电影最热评论

    主要用到lxml的etree解析网页代码,xpath获取HTML标签. 代码如下: 1 #!/user/bin env python 2 # author:Simple-Sir 3 # time:20 ...

  8. selenium实现并发

    for循环和多线程 + selenium 实例一 for循环 # -*- coding: utf-8 -*- """ Datetime: 2019/6/22 Author ...

  9. day 18 C语言顺序结构基础定义1

    (1).有以下程序: 程序运行后的输出结果是[B] (A).3,5,5,3 (B).3,5,3,5 (C).5,3,3,5 (D).5,3,5,3 这个题其实也可以弄成改错题,传到函数里面要对其值操作 ...

  10. echart 横轴倾斜

    xAxis: [ { type: 'category', data:[], axisLabel: { interval:0, rotate:40 }, grid: { left: '10%', bot ...