zoukankan      html  css  js  c++  java
  • C# 接口和继承

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

    例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(); } } }
    复制代码

    运行结果:

    例子2:

    复制代码
    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();
            }
        }
    }
    复制代码

    运行结果:

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

  • 相关阅读:
    【一篇文章就够了】Apollo
    【一篇文章就够了】Redis入门
    使用IDEA学习廖雪峰官方Git教程
    SourceTree的使用介绍
    【黑马旅游网】总结
    Entity Framework数据迁移命令使用总结
    leetcode editor
    IDEA个性化配置
    mysql5.7驱动(tableau,excel)
    正则表达式(1)
  • 原文地址:https://www.cnblogs.com/wwwbdabc/p/11280341.html
Copyright © 2011-2022 走看看