C#学习笔记(三)接口

接口定义

使用interface关键字定义接口(而类是用关键字class定义)。在接口中,要按照与在类中一样的方式声明方法,只是不允许制定任何访问修饰符。接口中的方法是没有实现的。实现接口的类必须实现接口中所有的方法。

接口的例子:

class IActivity{
  void eat();
  void walk();
  void sleep();
}

实现接口:

class Cat : IActivity
    {
        public void eat()
        {
            Console.WriteLine("A cat is eating");
        }
        public void walk()
        {
            Console.WriteLine("A cat is walking");
        }
        public void sleep()
        {
            Console.WriteLine("A cat is sleeping");
        }
    }
class Program
    {
        static void Main(string[] args)
        {
            Cat cat = new Cat();
            cat.eat();//output:A cat is eating
            cat.walk();//output:A cat is walking
            cat.sleep();//output:A cat is sleeping
        }
    }

实现多个接口:

一个类最多只有一个基类,但是可以有多个接口。类必须实现这些接口的所有方法。

 interface IActivity
    {
        void eat();
        void walk();
        void sleep();
    }
    interface IName
    {
        void name();
    } 
    class Cat : IActivity,IName   //实现多个接口,以“,”隔开
    {
        public void eat()
        {
            Console.WriteLine("A cat is eating");
        }
        public void walk()
        {
            Console.WriteLine("A cat is walking");
        }
        public void sleep()
        {
            Console.WriteLine("A cat is sleeping");
        }
        public void name()
        {
            Console.WriteLine("I am a cat");
        }
    }
    class Program
    {
        static void Main(string[] args)
        {
            Cat cat = new Cat();
            cat.eat();//output:A cat is eating
            cat.walk();//output:A cat is walking
            cat.sleep();//output:A cat is sleeping
            cat.name();//output:I am a cat
        }
    }

另一种实现:

 interface IActivity
    {
        void eat();
        void walk();
        void sleep();
    }
    interface IName:IActivity
    { //接口之上又实现一个接口
        void name();
    } 
    class Cat :IName
    {//要实现IName接口和IActivity中的所有方法
        public void eat()
        {
            Console.WriteLine("A cat is eating");
        }
        public void walk()
        {
            Console.WriteLine("A cat is walking");
        }
        public void sleep()
        {
            Console.WriteLine("A cat is sleeping");
        }
        public void name()
        {
            Console.WriteLine("I am a cat");
        }
    }
    class Program
    {
        static void Main(string[] args)
        {
            Cat cat = new Cat();
            cat.eat();//output:A cat is eating
            cat.walk();//output:A cat is walking
            cat.sleep();//output:A cat is sleeping
            cat.name();//output:I am a cat
        }
    }

显示实现接口:

如果类实现的多个接口,接口中难免有同名的方法,这个时候可以通过显示实现接口解决:接口名.方法名

 interface IActivity
    {
        void eat();
        void walk();
        void sleep();
    }
    interface IFree
    {
        void sleep();
    } 
    class Cat : IActivity,IFree
    {
        public void eat()
        {
            Console.WriteLine("A cat is eating");
        }
        public void walk()
        {
            Console.WriteLine("A cat is walking");
        }
        void IActivity.sleep()//显示接口的实现
        {
            Console.WriteLine("A cat is sleeping in activity");
        }
        void IFree.sleep()//显示接口的实现
        {
            Console.WriteLine("A cat is sleeping in free");
        }
    }

但是显示接口实现的方法没有public标记。如果方法是显示接口实现的一部分,就不能为方法指定访问修饰符。

那么如何访问这些方法呢?通过恰当的接口引用类的对象

class Program
    {//第一种写法
        static void Main(string[] args)
        {
            Cat cat = new Cat();
           (cat as IActivity).sleep();
            (cat as IFree).sleep();
        }
    }
 class Program
    {//第二种写法
        static void Main(string[] args)
        {
            Cat cat = new Cat();
            IActivity activity = cat;
            activity.sleep();
            IFree free = cat;
            free.sleep();
        }
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值