C# 接口

接口是什么和如何定义接口

**接口的定义是指定一组函数成员而不实现成员的引用类型,其它类型和接口可以继承接口。
接口使用 interface 关键字声明,它与类的声明类似。接口声明默认是 public 的。如:

//interface Ijiekou
    {
        void Apple();
    }

接口本身并不实现任何功能,它只是和声明实现该接口的对象订立一个必须实现哪些行为的契约。例如:

// using System;
namespace Hutao
{
    interface Ijiekou
    {
        void Apple();
    }
    class Keqin:Ijiekou
    {
        static void Main(String[] args)
        {
            Keqin keqin = new Keqin();
            keqin.Apple();
        }
        public void Apple()
        {
            Console.WriteLine("接口");
        }
    }
}

结果为:在这里插入图片描述
若不实现"行为的契约",如:

// using System;
namespace Hutao
{
    interface Ijiekou
    {
        void Apple();
    }
    class Keqin:Ijiekou
    {
        static void Main(String[] args)
        {
            Keqin keqin = new Keqin();
        }
    }
}

则会出现以下的报错:在这里插入图片描述

接口的特点

1)通过接口可以实现多重继承,C# 接口的成员不能有 public、protected、internal、private 等修饰符。原因很简单,接口里面的方法都需要由外面接口实现去实现方法体,
那么其修饰符必然是 public。C# 接口中的成员默认是 public 的,java 中是可以加 public 的。
(2)接口成员不能有 new、static、abstract、override、virtual 修饰符。有一点要注意,
当一个接口实现一个接口,这2个接口中有相同的方法时,可用 new 关键字隐藏父接口中的方法。
(3)接口中只包含成员的签名,接口没有构造函数,所以不能直接使用 new 对接口进行实例化。接口中只能包含方法、属性、事件和索引的组合。
接口一旦被实现,实现类必须实现接口中的所有成员,除非实现类本身是抽象类。
(4)C# 是单继承,接口是解决 C# 里面类可以同时继承多个基类的问题。
下面举一个多继承的例子:

// class Program
{
    static void Main(string[] args)
    {
        IWorker james1 = new James1();
        IWorker james2 = new James2();
        james1.work("设计");
        james2.work("编程");
        //从这个例子我体会到了有接口的好处,可以想象如果又来了新的员工。
        //如果不采用接口,而是每个员工都有一个单独的类,这样就会容易出错。
        //如果有接口这种协议约束的话,那么只要实现了接口就肯定有接口里声明的方法,我们只需拿来调用。
    }
}
public interface IWorker{ void work(string s); }
class James1 : IWorker
{
    public void work(string s)
    {
        Console.WriteLine("我的名字是James1,我的工作是" +s);
    }
}
class James2 : IWorker
{
    public void work(string s)
    {
        Console.WriteLine("我的名字是James2,我的工作是"+s);
    }
}

接口与抽象类的共同点和不同点

接口和抽象类的共同点:
1.都可以被继承。
2.都不能被直接实例化。
3.都可以包含方法的声明。
接口和抽象类的不同点:
1.接口的子类必须实现所有声明的方法,抽象类的子类必须实现所有的抽象方法(必须是共有的),普通方法可不实现。
2.接口不能包含成员变量,抽象类可包含成员变量。
3.接口不能包含构造函数,抽象类可包含构造函数。
4.接口可以多继承,抽象类只能单继承。
5.接口方法声明默认为public,抽象类可以由其他访问修饰符修饰。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值