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();
        }
    }
}
復制代碼

運行結果:

總結:接口之間繼承表示方法和類繼承是相同的,繼承的規則也是相同的,即子接口獲得父接口的內容,如果有多個接口,接口之間用","隔開。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM