c#中的接口


一、接口定义

提供了一组方法声明的统一命名(不提供实现,实现是继承他的类的事)。


二、接口的使用

2.1什么时候使用接口

当你想要用类做多重继承的时候,就要用接口(类不支持多重继承)。

实例1:狗继承动物


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication1
{
    public abstract class Animal
    {
        public void EatFood()
        {
            Console.WriteLine("我能吃东西");
        }
    }

    public class Dog : Animal
    {
        public Dog()
        {
            Console.WriteLine("我是狗");
        }
    }


  
    class Program
    {
        static void Main(string[] args)
        {
            Dog dog = new Dog();
            dog.EatFood();

  
        }
    }
}



实例2:特殊的狗(会表演)--接口


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication1
{
    public abstract class Animal
    {
        public void EatFood()
        {
            Console.WriteLine("我能吃东西");
        }
    }

    public class Dog : Animal
    {
        public Dog()
        {
            Console.WriteLine("我是狗");
        }
    }

    //定义表演接口
    public interface IAnimalShow
    {
        void Show();
    }

    //定义导盲接口
    public interface IAnimalHelpPeople
    {
        void Help();
    }

    //定义特殊狗类(表演)
    public class SpecialDog : Animal, IAnimalShow,IAnimalHelpPeople
    {
        public SpecialDog()
        {
            Console.WriteLine("我是特殊的狗");
        }
        隐式接口
        public void Show()
        {
            Console.WriteLine("我会表演");
        }

    class Program
    {
        static void Main(string[] args)
        {
            Dog dog = new Dog();
            dog.EatFood();

            SpecialDog s_dog = new SpecialDog();
            s_dog.Show();
            s_dog.Help();

        }
    }
}



2.2显式接口和隐式接口的对比

1.隐式:类和接口都可以访问接口中的方法。显式:接口方法只能通过接口来完成,因此接口方法默认为私有

2.单个接口推荐使用隐式接口

3.实现多个接口推荐用显式接口

实例3:显式接口与隐式接口


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication1
{
    public abstract class Animal
    {
        public void EatFood()
        {
            Console.WriteLine("我能吃东西");
        }
    }

    public class Dog : Animal
    {
        public Dog()
        {
            Console.WriteLine("我是狗");
        }
    }

    //定义表演接口
    public interface IAnimalShow
    {
        void Show();
    }

    //定义能够帮助人类狗的接口
    public interface IAnimalHelpPeople
    {
        void Help();
    }

    //定义特殊狗类(表演)
    public class SpecialDog : Animal, IAnimalShow,IAnimalHelpPeople
    {
        public SpecialDog()
        {
            Console.WriteLine("我是特殊的狗");
        }


        //显式接口
        void IAnimalShow.Show()
        {
            Console.WriteLine("我会表演");
        }
        void IAnimalHelpPeople.Help()
        {
            Console.WriteLine("我能帮助人");
        }
    }


    class Program
    {
        static void Main(string[] args)
        {
            Dog dog = new Dog();
            dog.EatFood();

            SpecialDog s_dog = new SpecialDog();
            IAnimalShow idogshow = (IAnimalShow)s_dog;
            idogshow.Show();
            IAnimalHelpPeople idoghelp = (IAnimalHelpPeople)s_dog;
            idoghelp.Help();
            Console.Read();
        }
    }
}



三、接口与抽象类

3.1对比

1.定义:抽象类使用,接口使用。他们都不能实例化。

2.抽象类可以包含虚方法,非抽象方法和静态成员。接口只能定义方法,不能实现。

3.抽象类不能够实现多继承,接口可以多继承。

4.抽象类:类实现继承:子类属于基类 is关系(A是B)。类实现接口:CAN-DO关系,即类能够实现这个接口。(A能做B)



参考:http://www.cnblogs.com/zhili/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

若云流风

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值