C# 接口和继承

转载自:https://www.cnblogs.com/songhe123/p/9558545.html

 

接口是方法的抽象,如果不同的类有同样的方法,那么就应该考虑使用接口。

例1:

using System;
/**
 假设我们公司有两种程序员:VB程序员指的是用VB写程序的程序员,用VBpro这个类表示;C程序员指的是用C写程序的程序员,用Cpro这个类来表示。每个类都有一个WriteCode()方法。
现在公司来了一个项目,要求派某个程序员写一个程序。
 */
namespace ConsoleApplication2
{
    //VB程序员
    class VBpro
    {
        public void WriteCode()
        {
            Console.WriteLine("我用vb写代码");
        }
    }
    //C程序员
    class Cpro
    {
        public void WriteCode()
        {
            Console.WriteLine("我用c写代码");
        }
    }
    //编写项目类
    class Pro
    {
        public void WriteProgram(VBpro program)
        {
            program.WriteCode();
        }
        public void WriteProgram(Cpro program)
        {
            program.WriteCode();
        }
    }
    //测试
    class Program
    {
        static void Main(string[] args)
        {
            Pro p = new Pro();
            VBpro p1 = new VBpro();
            p.WriteProgram(p1);
            Cpro p2 = new Cpro();
            p.WriteProgram(p2);
            Console.ReadKey();
        }
    }
}

/**
 但是如果这时公司又来了一个C#程序员,我们怎么改这段程序,使它能够实现用C#写程序的功能呢?我们需要增加一个新类C#程序员类,同时在此项目类中要再次
 重载WritePrograme(C#pro programer)方法。这下麻烦多了。如果还有C++程序员,JAVA程序员呢。但是如果改用接口,就完全不一样了
 */
namespace ConsoleApplication2
{
    //申明一个程序员接口
    public interface IProgramer
    {
        void WriteCode();
    }
    //vb程序员
    class VBpro : IProgramer
    {
        public void WriteCode()
        {
            Console.WriteLine("我用vb写代码");
        }
    }
    //c程序员
    class Cpro : IProgramer
    {
        public void WriteCode()
        {
            Console.WriteLine("我用c写代码");
        }
    }
    //编写项目类
    class Pro
    {
        public void WriteProgram(IProgramer iprogramer)
        {
            iprogramer.WriteCode();
        }
    }
    //测试
    class Program
    {
        static void Main(string[] args)
        {
            Pro p = new Pro();
            VBpro p1 = new VBpro();
            p.WriteProgram(p1);
            Cpro p2 = new Cpro();
            p.WriteProgram(p2);
            Console.ReadKey();
        }
    }

}

运行结果:

using System;
namespace ConsoleApplication1
{
    public interface Ichoose
    {
        void on();
        void off();
    }

    public class TV : Ichoose
    {
        private string name = "test1";
        public void on()
        {
            Console.WriteLine("{0}电视打开了", this.name);
        }

        public void off()
        {
            Console.WriteLine("{0}电视关闭了", this.name);
        }
    }

    public class Ice : Ichoose
    {
        private string name = "test2";
        public void on()
        {
            Console.WriteLine("{0}冰箱打开了", this.name);
        }
        public void off()
        {
            Console.WriteLine("{0}冰箱关闭了", this.name);
        }
    }


    class Program
    {
        static void Main(string[] args)
        {
            TV tvString = new TV();
            tvString.on();
            tvString.off();
            Ice iceString = new Ice();
            iceString.on();
            iceString.off();
            Console.ReadKey();
        }
    }
}

运行结果:

 

接口的继承

C#中接口可以多继承,接口之间可以相互继承和多继承。一个类可以同时继承一个类和多个接口,但是接口不能继承类。

using System;

/**
 假如你是一名在职学生,你就具有双重身份。一个身份是学生,必须完成学习任务,一个身份是职员,必须完成工作任务。进一步说,你是计算机类学生,除了学习基础课程,
 还必须学习C#程序设计。现在建立一个模型,应该如何建立?
 1.我们首先来定义一个学生接口,规定学生必须学习,再建立一个职员接口,规定职员必须完成工作任务。
 2.计算机专业的学生,除了完成一般学习任务,还是学习C#。可以再定义一个接口,继承学生接口,规定自己的学习任务。
 */
namespace ConsoleApplication3
{
    //定义学生接口
    public interface IStudent
    {
        void study_base();
    }
    //定义职员接口
    public interface IEmployee
    {
        void work();
    }
    //定义计算机类学生接口
    public interface IIStudent : IStudent
    {
        void study_computer();
    }

    public class Infostudent : IEmployee, IIStudent
    {
        //实现学生接口
        public void study_base() 
        {
            Console.WriteLine("数学、语文和英语必须学好");
        }
        //实现职员接口
        public void work()
        {
            Console.WriteLine("工作必须完成");
        }
        //实现计算机类学生接口
        public void study_computer()
        {
            Console.WriteLine("计算机类的学生除学好基础课外,还要学C#");
        }
    }
    

    //测试
    class Program
    {
        static void Main(string[] args)
        {
            Infostudent infostudent = new Infostudent();
            infostudent.study_base();
            infostudent.work();
            infostudent.study_computer();
            Console.ReadKey();
        }
    }
}

运行结果:

总结:接口之间继承表示方法和类继承是相同的,继承的规则也是相同的,即子接口获得父接口的内容,如果有多个接口,接口之间用","隔开。

 

第二篇: C#中的接口interface的使用

https://blog.csdn.net/qq_36922335/article/details/73339342

 

第三篇:C# 接口的作用浅谈举例

https://blog.csdn.net/liuqinghui1990/article/details/77171051

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值