C# 接口(Interface)之一

1. 环境

Visual Studio 2017,Windows10 企业版。

注:本次练习类名和接口均采用中文书写,算是对 Visual Studio 的测试,也省去一些解释,一目了然。不建议在正式项目中使用中文命名法。

在 Visual Studio 2017 下创建一个解决方案 MyCsharp,其中新建两个项目,分别是Ex03 (类库/.net framework ) 和 ConsoleNET(控制台应用程序/.net framework)。

2. 代码

1)项目 Ex03(类库/.net framework )

namespace MyCsharp.Ex03
{
    public interface I接口
    {
        void 输入(string 输入值);
        string 输出();
    }
    public class 甲 : I接口
    {
        public void 输入(string a)
        {    }
        public string 输出()
        { return "来自甲的输出。";   }
    }
    public class 乙 : I接口
    {
        public void 输入(string a)
        {    }
        public string 输出()
        { return "来自乙的输出。";   }
    }
    public class 丙 : I接口
    {
        public void 输入(string a)
        {    }
        public string 输出()
        {  return "来自丙的输出。";  }
    }
    // 接口作用最关键的点睛之处,将上述几个类统一。
    // 接口的优点具体在下文 方法二 可见。
    public class 协作
    {
        // 接口常用方法——接口作为参数
        public void 输入(I接口 接口名)
        {    }
        public string 输出(I接口 接口名)
        {   return 接口名.输出();   }
        // 接口作为返回值
        public I接口 输出()
        {
          return new 甲;  // 返回实例化的类,不建议这种写法 
        }
    }
}

2)项目 ConsoleNET( 控制台应用程序/.net framework )

using System;

namespace ConsoleNET
{
    class Program
    {
        static void Main(string[] args)
        {
            //方法一:通过接口启用协作
            MyCsharp.Ex03.I接口 协作接口;
            协作接口 = new MyCsharp.Ex03.甲();
            Console.WriteLine( 协作接口.输出() );
            协作接口 = new MyCsharp.Ex03.丙();
            Console.WriteLine( 协作接口.输出() );

            //方法二:通过封装的类关联多个类,接口作为参数
            MyCsharp.Ex03.协作 my协作 = new MyCshcarp.Ex03.协作();
            my协作.输出(new 甲);  //引用 甲类,实现 甲.输出()
            my协作.输出(new 乙);  //引用 乙类,实现 乙.输出()

            //方法三:通过封装的类关联多个类,接口作为返回值
            my协作.输出().输出();  // 这里需要好好体会和理解,两个"输出"的含义是不一样的。

            Console.ReadKey();
        }
    } 
}

3)运行结果:

4)项目 Ex03 编译后生成的 Ex03.dll 结构

3.  小结

把项目 ConsoleNET 代码中的 (类) 和 (类) 换成 MSSQL 和 Oracle 数据驱动,或其他数据库驱动,是不是感觉与 ADO.NET 连接不同数据库驱动代码相似。

另:接口的优点为:

假设某接口有A/B/C三个类,常规写法是:

接口 实例 = new 实现接口的类A() 
接口 实例 = new 实现接口的类B() 
接口 实例 = new 实现接口的类C() 
这样的逻辑就是说,我们需要某个类,所以我们每次实例化它。

如果把 ABC这三个类,再用一个类封D装起来,会怎么样呢?
接口 实例 = D.A
接口 实例 = D.B
接口 实例 = D.C
我们还是需要某个类,但是,我们不需要每次都实例化了,只需要找D“拿”就行。

转载于:https://my.oschina.net/primates/blog/1606974

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值