.NET 接口

 

  • 接口

     接口是一组抽象成员的集合,表示某个类或结构可以选择去实现的行为,描述的是可属于任何类或结构的一组相关功能。接口方法的实现是在实现接口的类中完成的,实现接口的类可以显式实现该接口的成员,显式实现的成员不能通过类实例访问,而只能通过接口实例访问。接口不能包含常量、字段、运算符、实例构造函数、析构函数或类型。 它不能包含静态成员。 接口成员是自动公开的,且不能包含任何访问修饰符。

  • 关键字

    • interface

  • 可包含成员

  • 方法

  • 备注

  • 接口类似于抽象基类:实现接口的任何非抽象类型都必须实现接口的所有成员。
  • 接口可以作为参数传递实现该接口的类型

  • 显式接口实现

     如果类实现两个接口,并且这两个接口包含具有相同签名的成员,那么在类中实现该成员将导致两个接口都使用该成员作为它们的实现。
interface IControl
{
    void Paint();
}
interface ISurface
{
    void Paint();
}
class SampleClass : IControl, ISurface
{
    // 2个接口都需要实现的方法
    public void Paint()
    {
    }
}
     然而,如果两个接口成员执行不同的函数,那么这可能会导致其中一个接口的实现不正确或两个接口的实现都不正确。可以显式地实现接口成员 -- 即创建一个仅通过该接口调用并且特定于该接口的类成员。这是使用接口名称和一个句点命名该类成员来实现的。
public class SampleClass : IControl, ISurface
{
    void IControl.Paint()
    {
        System.Console.WriteLine("IControl.Paint");
    }
    void ISurface.Paint()
    {
        System.Console.WriteLine("ISurface.Paint");
    }
}
     类成员 IControl.Paint 只能通过 IControl 接口使用,ISurface.Paint 只能通过 ISurface 使用。两个方法实现都是分离的,都不可以直接在类中使用。
SampleClass obj = new SampleClass();
IControl c = (IControl)obj;
c.Paint();
ISurface s = (ISurface)obj;
s.Paint();
     显式实现还用于解决两个接口分别声明具有相同名称的不同成员(如属性和方法)的情况。为了同时实现两个接口,类必须对属性 P 和/或方法 P 使用显式实现以避免编译器错误。
interface ILeft
{
    int P { get;}
}
interface IRight
{
    int P();
}
class Middle : ILeft, IRight
{
    public int P() { return 0; }
    int ILeft.P { get { return 0; } }
}

  • 判断类型是否支持指定接口

    • try/catch
     类型强制转换为指定接口,如果类型不支持被请求的接口,将会收到一个无效转换异常InvalidCastException。
    • as
     使用as关键字将类型指定为接口,获得指向对象接口的引用,如果不支持该接口则获得一个值为null的空引用。
    • is
     使用is关键字检查类型是否实现该接口,如果类型不支持该接口则返回false,如果支持该接口则返回true。
 

  • 构建可枚举类型

     如果类型需要实现可枚举的功能需要继承自IEnumerable或IEnumerator接口。
    • 实现接口
      • IEnumerable
      • IEnumerator

 

  • 构建可克隆的对象

     如果类型需要实现可克隆的功能需要继承自ICloneable接口。
    • 实现接口
      • ICloneable

 

  • 构建可比较的对象

     如果类型需要实现可比较的功能需要继承自IComparable接口。
    • 实现接口
      • IComparable

 

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值