精通C#:Chapter8 接口-学习笔记

1、接口可以进一步支持面向对象编程,接口其实是用来构建支持多种行为的类类型的。

2、.NET基础类库中定义了很多标准接口,我们自定义的类和结构可以实现这些预定义的接口,从而使得我们自定义的类或结构也支持对象克隆、对象枚举、对象排序等高级行为。

3、接口的定义:接口就是一组抽象成员的命名集合。接口成员总是抽象的,由每个类自己去实现这些方法。

接口可以被任何层次结构、任何命名空间、任何程序集中的任何类或结构来实现,接口具有较高的多态性

4、自定义接口类型:

(1)所有的接口成员都是隐式公共的和抽象的

(2)接口是纯粹的协议,接口不能包含字段、构造函数、函数实现,函数实现留给支持它的类或结构去实现;接口可以包含方法声明、属性、索引器、事件

(3)实现接口是一个“要么全做要么全部做”的命题,支持接口的类或结构不能选择实现接口的哪些成员;

5、接口调用

(1)直接在支持该接口的类对象级别调用;

(2)直接利用接口调用;(或者将类对象显示转换成接口之后,再提取需要的接口使用)

eg:

static void Main(string[] args)
        {
            Hexagon h = new Hexagon();
            Console.WriteLine("{0}", <span style="BACKGROUND-COLOR: #33ff33">h.Points</span>);// 1、直接在支持该接口的类对象级别调用;
          Circle c = new Circle();

            // 强制转换看结果
            IPointy ip1 = null;
            try
            {
                ip1 = <span style="BACKGROUND-COLOR: #33ff33">(IPointy)c</span>;//2、显示转换之后再使用
            }
            catch (InvalidCastException e)
            {

                Console.WriteLine(e.Message);
            }
            // as语句
            IPointy ip2 = h as IPointy;
            if (ip2 != null)
            {
                Console.WriteLine("{0}",<span style="BACKGROUND-COLOR: #33ff33">ip2.Points</span>);// 2、直接利用接口调用;
            }
            else
            {
                Console.WriteLine("2");
            }
            // is语句
            Shape[] myShapes = new Shape[]{
                new Hexagon(),new Circle(),new Triangle("Joe"),new Circle("Joe")
            };
            for (int i = 0; i < myShapes.Length; i++)
            {
                myShapes[i].Draw();

                if (myShapes[i] is IPointy)
                {
                    Console.WriteLine("{0}",((IPointy)myShapes[i]).Points);
                }
                else
                {
                    Console.WriteLine("not a IPointy!");
                }
            }
        }


 

(3)如何判断类型是否支持某个接口,有三种方法:强制转换看结果、as语句、is语句;

6、接口作为参数:如果参数为接口,则任何支持该接口的类对象均可作为参数传递;

7、接口类型数组:同上,可以存储任何支持该接口的类对象;

8、显示接口实现,用于何处?

一个类可以支持多个接口,如果这些接口包含重名成员,这是就需要用到接口的显示实现。如下例:

9、接口继承:接口可以继承,接口可进行多重继承,即一个接口可以继承多个接口;

10、何时使用接口呢?


11、构建可枚举类型:类需支持IEnumerable接口;

构建可克隆类型:类需支持ICloneable接口;

构建可比较类型:类需支持IComparable接口;

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值