C#接口

2019-08-08  本文已影响0人  86a262e62b0b

参考:

接口:

一. 接口和抽象类的区别

抽象类与接口对比:

  1. 相同点:
  1. 不同点:

还有一点,我们在VS中实现接口时会发现有2个选项,一个是实现接口,一个是显示实现接口。实现接口就是我们平常理解的实现接口,而显示实现接口的话,实现的方法是属于接口的,而不是属于实现类的。

二. 一个可以实例化接口的特例

class Program
{
    static void Main(string[] args)
    {
        //C#中COM接口是可以实例化的,但其实这种写法是使接口“映射”到某一个类上,实际上创建的是这个类的实例。
        IWorker worker = new IWorker();
    }
}
[ComImport, CoClass(typeof(James1))]
[Guid("d60908eb-fd5a-4d3c-9392-8646fcd1edce")]
public interface IWorker{ void work(string s); }
//ComImport特性发生在tlbimp.exe导入COM类型类库的时候,生成的托管类型会标记有ComImport特性
//Guid特性是一个GUID标识,COM类型是用GUID来标识的。

利用 .NET Reflector 查看时可以很明显的看到 Main 方法里面的代码是:

IWorker worker=new James1();

三. 接口隐式与显示实现

  1. 隐式接口:
interface IAnimal
{
  void Dog();
}
class Animal:IAnimal
{
  public void Dog()
  {
     Console.WriteLine("dog...");
  }
}

一般我们都会这么调用:

Animal animal = new Animal();
animal.Dog();
IAnimal animal = new Animal();
animal.Dog();
  1. 显示接口
interface IAnimal
{
  void Dog();
}
class Animal:IAnimal
{
  void IAnimal.Dog()  //注意
  {
    Console.WriteLine("dog...");
  }
}
IAnimal animal = new Animal();
animal.Dog();
Animal animal = new Animal();
(animal as IAnimal).Dog();

总结:

上一篇 下一篇

猜你喜欢

热点阅读