this 扩展类方法

在接口IUserService 中只有一个 GetUserName() 方法

在UserClient类中通过 this IUserService 扩展 它的方法。

    interface IUserService
    {
        string GetUserName(string name);
    }

    public class UserService : IUserService
    {

        public IUserService GetUserName(string name)
        {
            return new UserService();
        }
    }

    public static class UserClient
    {
        public static int GetUserAge(this IUserService user)
        {
            return 12;
        }
    }

看如下代码 UserService 接口就扩展出了GetUserAge() 方法。

   static void Main(string[] args)
        {
            var servicet = new UserService();
            servicet.GetUserName("a").GetUserAge();
        }
时间: 2024-12-08 16:16:52

this 扩展类方法的相关文章

扩展类方法

创建一个名为MyHelper的类,约定了此类中的方法均是扩展方法.注意这个类必须是静态类(Static) 扩展方法必须是Static静态方法 第一个参数为待扩展的类型,前面标注this 如果MyHelper在一个类库中,记得对其添加引用并using相关名称空间 例子: 扩展bool类型的方法 public static string ToChineses(this bool helper)        {            return  helper ? "真" : "

iOS扩展类方法之category!

一.category介绍 category可以不修改源代码的基础上扩展新的方法,Category只能用于方法,不能用于成员变量. 二.category创建 eg:我们扩展NSString类新方法: 1.新建category类->选择OC File 2.继承选择calss选择NSString,名字写MyTest,类型type选择category. 创建完成就会生成 NSString+MyTest 的.h 和.m文件. 在头文件添加一个方法 test. 在.m实现方法 test 这个一个cageto

javascript继承扩展类方法实现

javascript没有原生的继承语法,这确实很让人困惑,但是广大人民群从的智慧是无穷的.最近呢,正尝到一点从源码中学习的甜头,不分享一下实在难以平复激动的心情.前不久改造视频播放插件的时候,找到了videojs这个优秀的开源项目.经过一段时间深入学习它的源码,发现它的继承机制写的很好,而且短小精悍,于是决定把它拔离出来,做成一个单独的库,方便以后项目中使用. //定义一个命名空间 var xut = {}; /** * Core Object/Class for objects that us

Swift中的结构体,类,协议,扩展和闭包的用法以及? 和 !的区别

// MARK: - 1.结构体 //1.声明一个结构体 struct Rect {    // 声明结构体变量的属性(存储属性)    var x:Float    var y:Float    var width:Float    var height:Float    // 声明结构体属性,要使用static    static var description:String?        // 声明一个计算属性(是用来专门计算结构体变量属性的setter,和getter方法,其本身没有存

扩展 Unity 内置类型 (组件)

Unity 内置组件基本没有可以继承的.某些比较常用但现有 API 没有定义的功能,我们可以通过C# 的扩展类方法来实现.下面是一些比较实用的扩展方法. 扩展 Transform 每一个 GameObject 都含有一个 Transform 组件(在 UGUI 里新引入的 RectTransform 继承 Transform),GameObject 的层级也是由 Transform 负责的.以下扩展方法使用了 C# 的委托,关于委托可以参考这里:C# 中的 delegate 和 event. /

Unity 中实用的 C# 扩展方法

Unity 内置组件基本没有可以继承的.某些比较常用但现有 API 没有定义的功能,我们可以通过 C# 的扩展类方法来实现(注意一点,扩展方法对于值类型传递的不是引用,所以无法修改原对象.并且传递体积较大的值类型可能造成性能问题).下面是一些比较实用的扩展方法,这些扩展方法的实现很多使用了 C# 的委托,关于委托可以参考这里:C# 中的 delegate, Lambda 和 event. 扩展 Transform 每一个 GameObject 都含有一个 Transform 组件(在 UGUI

用起来很方便的枚举扩展类

因项目需要花了点时间写了个枚举扩展类,详细内容如下: 枚举声明: public enum Status { [Description("邀请加入")] 邀请加入 = 1, [Description("拒绝邀请")] 拒绝邀请 = 2, [Description("申请加入")] 申请加入 = 3, [Description("拒绝加入")] 拒绝加入 = 4, [Description("同意加入")] 同

Dubbo 扩展点加载机制:从 Java SPI 到 Dubbo SPI

SPI 全称为 Service Provider Interface,是一种服务发现机制.当程序运行调用接口时,会根据配置文件或默认规则信息加载对应的实现类.所以在程序中并没有直接指定使用接口的哪个实现,而是在外部进行装配. 要想了解 Dubbo 的设计与实现,其中 Dubbo SPI 加载机制是必须了解的,在 Dubbo 中有大量功能的实现都是基于 Dubbo SPI 实现解耦,同时也使得 Dubbo 获得如此好的可扩展性. Java SPI 通过完成一个 Java SPI 的操作来了解它的机

Swift之基础学习二

//MARK: - ?(可选类型)和!(强制解包)的区别 var number : Int?var number1 = number!//程序会崩溃(如果对值为nil的变量进行强制解包,会造成程序崩溃) //MARK: - 结构体 1 //1.声明一个结构体 2 struct Rect { 3 //声明结构体变量的属性(存储属性) 4 var x : Float 5 var y : Float 6 var width : Float 7 var heighy : Float 8 //声明结构体属