欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C#中類與接口的區(qū)別講解

 更新時(shí)間:2022年04月20日 14:38:59   作者:農(nóng)碼一生  
本文詳細(xì)講解了C#中類與接口的區(qū)別,文中通過示例代碼介紹的非常詳細(xì)。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下

一、抽象類

抽象類是特殊的類,只是不能被實(shí)例化;除此以外,具有類的其他特性;重要的是抽象類可以包括抽象方法,這是普通類所不能的。抽象方法只能聲明于抽象類中,且不包含任何實(shí)現(xiàn),派生類必須覆蓋它們。另外,抽象類可以派生自一個(gè)抽象類,可以覆蓋基類的抽象方法也可以不覆蓋,如果不覆蓋,則其派生類必須覆蓋它們。

注意:

1.抽象方法,必須存在于抽象類當(dāng)中。相反,抽象類中不一定全部是抽象方法。
2.抽象方法沒有方法體,繼承了抽象類的子類,必須實(shí)現(xiàn)父類的所有的抽象方法。
3.抽象類可以被實(shí)例化,但不能通過普通的實(shí)例化new,它只能通過父類的應(yīng)用指向子類的實(shí)例來間接的實(shí)例化子類。如:

Person t = new Teacher();

二、接口

接口是引用類型的,類似于類,接口內(nèi)包含的全部是未實(shí)現(xiàn)的方法,而且接口類和方法的關(guān)鍵詞不需要再聲明abstract。和抽象類的相似之處有三點(diǎn):
1.不能實(shí)例化;
2.包含未實(shí)現(xiàn)的方法聲明;
3.派生類必須實(shí)現(xiàn)未實(shí)現(xiàn)的方法,抽象類是抽象方法,接口則是所有成員(不僅是方法包括其他成員);
另外,接口有如下特性:
接口除了可以包含方法之外,還可以包含屬性、索引器、事件,而且這些成員都被定義為公有的。
除此之外,不能包含任何其他的成員,例如:常量、域、構(gòu)造函數(shù)、析構(gòu)函數(shù)、靜態(tài)成員。一個(gè)類可以直接繼承多個(gè)接口,但只能直接繼承一個(gè)類(包括抽象類)。

三、抽象類和接口的相同點(diǎn)和不同點(diǎn)

不同點(diǎn):接口不包含方法的實(shí)現(xiàn),抽象類可以包含,也可以不包含,不包含時(shí)非抽象方法時(shí){}必須保留。
接口可以多繼承,類只能單繼承。
類定義可在不同的源文件之間進(jìn)行拆分。
相同點(diǎn):都不能進(jìn)行實(shí)例化,必須通過繼承實(shí)現(xiàn)其抽象方法。
接口、類和結(jié)構(gòu)都可以從多個(gè)接口繼承。
接口類似于抽象基類:繼承接口的任何非抽象類型都必須實(shí)現(xiàn)接口的所有成員。
接口和類都可以包含事件、索引器、方法和屬性。

四、代碼案例

抽象類:

namespace ClassDemo1
{
    
    #region 類
    public abstract class Person
    {
        //函數(shù)即使對象的動作
        public void Breath()
        {
            //空方法體
        }
        public void Name()
        {
            Console.WriteLine("人人都有姓名!");
        }
        public virtual void Drink() // 注意virtual,表明這是一個(gè)虛擬函數(shù)
        {
            Console.WriteLine("人是要喝水的!");
        }
        public void Eat()
        {
            Console.WriteLine("人是要吃飯的!");
        }
        public void Sleep()
        {
            Console.WriteLine("人是要睡覺的!");
        }
    }
    public  class Teacher :Person 
    {
        //重定義父類方法
        public new  void Eat()
        {
            Console.WriteLine("教師是人,也是要吃飯的!");
        }
        //重寫父類方法
        public override void Drink()
        {
            Console.WriteLine("教師是人,也是要喝水的!");
        }
        //自己獨(dú)有方法(動作)
        public void Teach()
        {
            Console.WriteLine("教師的義務(wù)是要進(jìn)行教授課程!");
        }
    }
    #endregion
    //測試
    class Program
    {
        static void Main(string[] args)
        {
            Teacher t = new Teacher();
            t.Breath();
            t.Name();
            t.Drink();
            t.Eat();
            t.Sleep();
            t.Teach();
            Console.ReadKey();
        }
    }
}

接口:

namespace InterfaceDemo1
{
    #region 接口
    //不能進(jìn)行實(shí)例化,只能通過繼承實(shí)現(xiàn)其抽象方法
    //還可以包含屬性、索引器、事件,而且這些成員都被定義為公有的。
    //除此之外,不能包含任何其他的成員,例如:常量、域、構(gòu)造函數(shù)、析構(gòu)函數(shù)、靜態(tài)成員。

    //定義學(xué)生接口
    public interface IStudent
    {
        //未實(shí)現(xiàn)的方法聲明;
         void study_base();
    }
    //定義職員接口
    public interface IEmployee
    {
        void work();
    }
    //定義計(jì)算機(jī)類學(xué)生接口
    public interface IIStudent : IStudent
    {
        void study_computer();
    }

    //接口能實(shí)現(xiàn)多繼承,子類必須實(shí)現(xiàn)繼承接口的所有方法
    public class Infostudent : IEmployee, IIStudent
    {
        //實(shí)現(xiàn)學(xué)生接口
        public void study_base()
        {
            Console.WriteLine("數(shù)學(xué)、語文和英語必須學(xué)好");
        }
        //實(shí)現(xiàn)職員接口
        public void work()
        {
            Console.WriteLine("工作必須完成");
        }
        //實(shí)現(xiàn)計(jì)算機(jī)類學(xué)生接口
        public void study_computer()
        {
            Console.WriteLine("計(jì)算機(jī)類的學(xué)生除學(xué)好基礎(chǔ)課外,還要學(xué)C#");
        }

        //自己定義的方法
        public void play_game()
        {
            Console.WriteLine("計(jì)算機(jī)類的學(xué)生除學(xué)好基礎(chǔ)課外和學(xué)C#外,還喜歡打游戲");
        }
        
    }

    #endregion

    //測試
    class Program
    {
        static void Main(string[] args)
        {
            //派生與接口的學(xué)生類
            Infostudent infostudent = new Infostudent();
            infostudent.study_base();
            infostudent.work();
            infostudent.study_computer();
            //學(xué)生自己獨(dú)有的方法
            infostudent.play_game();

            Console.ReadKey();
        }
    }
}

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • 使用C#實(shí)現(xiàn)將CSV文件內(nèi)容裝配成對象列表

    使用C#實(shí)現(xiàn)將CSV文件內(nèi)容裝配成對象列表

    這篇文章主要為大家詳細(xì)介紹了如何使用C#實(shí)現(xiàn)將CSV文件內(nèi)容裝配成對象列表,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2023-12-12
  • windows系統(tǒng)下,如何在C#程序中自動安裝字體

    windows系統(tǒng)下,如何在C#程序中自動安裝字體

    在Windows系統(tǒng)中,原有自帶的字體樣式有限,有時(shí)候我們的程序會使用到個(gè)別稀有或系統(tǒng)不自帶的字體。因此我們需要將字體打包到程序中,當(dāng)程序啟動時(shí),檢測系統(tǒng)是否有該字體,如果沒有則安裝該字體,也可以動態(tài)加載字體。
    2020-11-11
  • C#判斷ip地址是否可以ping的通

    C#判斷ip地址是否可以ping的通

    這篇文章主要介紹了ip地址是否可以ping的通的方法,使用到了C#,需要的朋友可以參考下
    2014-06-06
  • c#:CTS類型系統(tǒng)

    c#:CTS類型系統(tǒng)

    CTS通用類型系統(tǒng),是.Net中一套定義類型的規(guī)則。我們要掌握c#開發(fā),首先要建立這個(gè)類型概念,只有知道c#的元素是什么類型,才能進(jìn)行相關(guān)的分析和選材。
    2012-12-12
  • C#實(shí)現(xiàn)簡單成績管理系統(tǒng)的完整步驟

    C#實(shí)現(xiàn)簡單成績管理系統(tǒng)的完整步驟

    這篇文章主要給大家介紹了關(guān)于C#實(shí)現(xiàn)簡單成績管理系統(tǒng)的完整步驟,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者使用C#具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-11-11
  • 關(guān)于C#中GUI編程的標(biāo)準(zhǔn)事件問題

    關(guān)于C#中GUI編程的標(biāo)準(zhǔn)事件問題

    這篇文章主要介紹了C#中GUI編程的標(biāo)準(zhǔn)事件,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-01-01
  • c#編寫的高并發(fā)數(shù)據(jù)庫控制訪問代碼

    c#編寫的高并發(fā)數(shù)據(jù)庫控制訪問代碼

    往往大數(shù)據(jù)量,高并發(fā)時(shí), 瓶頸都在數(shù)據(jù)庫上, 好多人都說用數(shù)據(jù)庫的復(fù)制,發(fā)布, 讀寫分離等技術(shù), 但主從數(shù)據(jù)庫之間同步時(shí)間有延遲.
    2015-03-03
  • 淺析WPF中控件拖拽與拖動的實(shí)現(xiàn)

    淺析WPF中控件拖拽與拖動的實(shí)現(xiàn)

    這篇文章主要為大家詳細(xì)介紹了如何在WPF中實(shí)現(xiàn)控件拖拽與拖動的功能,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2023-12-12
  • C# 忽略大小寫進(jìn)行字符串比較

    C# 忽略大小寫進(jìn)行字符串比較

    這篇文章主要介紹了C# 字符串比較忽略大小寫的方法,幫助大家更好的理解和使用c#,感興趣的朋友可以了解下
    2021-02-02
  • C# Dynamic關(guān)鍵字之:調(diào)用屬性、方法、字段的實(shí)現(xiàn)方法

    C# Dynamic關(guān)鍵字之:調(diào)用屬性、方法、字段的實(shí)現(xiàn)方法

    本篇文章是對C#中調(diào)用屬性、方法、字段的實(shí)現(xiàn)方法進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-05-05

最新評論