zoukankan      html  css  js  c++  java
  • C# 3.0 扩展方法&接口

    namespace ExtensionInterfaceMethod
    {
        class Program
        {
            static void Main(string[] args)
            {
                //使用接口变量来调用扩展方法
                IBasicInterface bii = new BasicImplement();
                bii.SubStract(9, 3);            
            }
        }
        //先创建一个简单的接口
        public interface IBasicInterface
        {
            int Add(int x, int y);
        }
        //创建一个实现该接口的类
        public class BasicImplement : IBasicInterface
        {
            #region IBasicInterface 成员
            public int Add(int x, int y)
            {
                return x + y;
            }
            #endregion
        }
    }
    View Code

    如果想要为该接口IBasicInterface增加一个相减的Subtract方法,在扩展方法中新定义一个Subtract方法。

    namespace ExtensionInterfaceMethod
    {
        public static class ExtensionMethodClass
        {
            public static int SubStract(this IBasicInterface basicinterface, int x,int y);
        }
    }
    View Code

    因为是接口扩展方法,所以不打算为这个扩展方法提供任何代码实现。

    编译时运行报错,解决方法,在接口扩展方法中实现代码。

    namespace ExtensionInterfaceMethod
    {
        public static class ExtensionMethodClass
        {
            public static int SubStract(this IBasicInterface basicinterface, int x, int y)
            {
                //尽管是扩展一个接口,但是还是必须添加对方法的实现
                return x - y;
            }
        }
    }
    View Code

    接口扩展方法的调用:

    • 使用实现了该接口的类来直接调用扩展方法
      BasicImplement bim = new BasicImplement();
      bim.SubStract(9, 5);
      View Code
    • 使用接口引用来调用
      IBasicInterface bii = new BasicImplement();
      bii.SubStract(9, 3);
      View Code
    namespace Extensions
    {
        using System;
        using ExtensionMethodsDemo1;
    
    
        public static class Extension
        {
            //扩展接口  
            public static void MethodB(this IMyInterface myInterface);
            {
                Console.WriteLine("Extension.MethodB(this IMyInterface myInterface)");
            }
    }
    }
    namespace ExtensionMethodsDemo1
    {
        using System;
        using Extensions;
    
        public interface IMyInterface
        {
            //void MethodB();
        }
    
        class A : IMyInterface
        {
            //public void MethodB() { Console.WriteLine("A.MethodB()"); }
        }
    
        class B : IMyInterface
        {
            //public void MethodB() { Console.WriteLine("B.MethodB()"); }
    
        }
        class C : IMyInterface
        {
            //public void MethodB() { Console.WriteLine("C.MethodB()"); }
    
        }
    
        class ExtMethodDemo
        {
            static void Main(string[] args)
            {
                IMyInterface a = new A();
                IMyInterface b = new B();
                IMyInterface c = new C();
    
                a.MethodB();
                b.MethodB();
                c.MethodB();
    
                Console.ReadLine();
            }
        }
    }
    Demo
    public interface I飞
    {
            
    }
    
    public static class 飞接口的扩展
    {
        public static void 飞<T>(this T 飞实例) where T : I飞
        {
            Console.WriteLine("准备");
            Console.WriteLine("张开双翅");
            Console.WriteLine("起飞");
            Console.WriteLine("我飞,我飞,我飞飞飞");
        }
    }
    
    public class 老虎
    {
        public virtual void 自我介绍()
        {
            Console.WriteLine("大家好,我是老虎。");
        }
    }
    
    public class 苍蝇 : I飞
    {
        public void 飞一个看看()
        {
            this.飞();
        }
    }
    
    public class 超级老虎 : 老虎, I飞
    {
        public override void 自我介绍()
        {
            Console.WriteLine("大家好,我是超级老虎哦!");
        }
    
        public void 我会飞哟()
        {
            this.飞();
        }
    }
    Demo2
  • 相关阅读:
    python_58_装饰器1
    python_57_高阶函数
    python_56_递归
    python_55_局部和全局变量
    python_54_函数调用函数
    python_53_函数补充
    python_52_函数返回值2
    mysql 使用 GROUP BY 时报错 ERROR 1055 (42000)
    sql之left join、right join、inner join的区别
    C++ 函数的重载和参数默认值
  • 原文地址:https://www.cnblogs.com/jshchg/p/11572924.html
Copyright © 2011-2022 走看看