看陳廣老師c#參考視頻總結(第十篇 完)

日期:2008-6-15

學習內容:接口,程序的運行過程

遺留問題:

學習總結:

 

接口與抽象類:

1.      類是對對象的抽象,可以把抽象類理解爲把類當作對象,抽象成的類。接口只是一個行爲的規範或規定。接口表述的是“我能做”(Can-do),抽象類更多的是定義在一系列緊密相關的類間(IS-a),而接口大多數是關係疏鬆但都實現某一功能的類中

2.      接口基本上不具備繼承的任何具體特點,它僅僅承諾了能夠調用的方法;

3.      一個類一次可以實現若干個接口,但是隻能擴展一個父類。

4.      抽象類實現了OOP中的一個原則,把可變的與不可變的分離。抽象類和接口就是定義爲不可變的,而把可變的由子類去實現。

5.      好的接口定義應該是具有專一功能性啊,而不是多功能的,否則造成接口污染。如果一個類只是實現了這個接口中的一個功能,而不得不去實現接口中的其他方法,就叫接口污染。

6.      如果抽象類實現接口,則可以把接口中方法映射到抽象類中作爲抽象方法而不必實現,而在抽象類的子類中實現接口中的方法。

接口與抽象類:

 

1.      抽象類用於部分實現一個類,再由用戶按需求對其進行不同的擴展和完善;接口只是定義一個行爲的規範或規定。

2.      抽象類在組件的所有實現間提供通用的已實現功能;接口創建在大範圍全異對象間使用的功能。

3.      抽象類主要用於關係密切的對象;而接口適合爲不相關的類提供通用功能。

4.      抽象類主要用於設計大的功能單元;而接口用於設計小而簡練的功能塊。

模擬場景:教師考取駕駛執照,那麼他屬於教師類還是司機類呢?

using System;

using System.Collections.Generic;

using System.Text;

 

namespace ConsoleApplication1

{

    interface IDrivingLicenceB

    {

        void getLicence();

    }

    interface IDrivingLicenceA:IDrivingLicenceB

    {

        new void getLicence();

    }

    class Teacher : IDrivingLicenceA

    {

        public void getLicence()

        {

            Console.WriteLine("老師考取了A類駕駛執照");

        }

    }

    class Student : IDrivingLicenceB

    {

        public void getLicence()

        {

            Console.WriteLine("學生考取了B類駕駛執照");

        }

    }

    class Program

    {

        static void DriveCar(string name, object o)

        {

            IDrivingLicenceB dl = o as IDrivingLicenceB;

            if (dl != null)

            {

                Console.WriteLine(name + "開動了卡車");

            }

            else

            {

                Console.WriteLine(name + "不能開卡車");

            }

        }

        static void DriveBus(string name, object o)

        {

            IDrivingLicenceA dl = o as IDrivingLicenceA;

            if (dl != null)

            {

                Console.WriteLine(name + "開動了公共汽車");

            }

            else

            {

                Console.WriteLine(name+"不能開公共汽車");

            }

        }

        static void Main(string[] args)

        {

            Teacher t = new Teacher();

            DriveCar("教師", t);

            DriveBus("教師", t);

            Student s = new Student();

            DriveCar("學生", s);

            DriveBus("學生", s);

        }

    }

}

 

 

程序功能:實現IComparable接口,來實現排序

using System;

using System.Collections.Generic;

using System.Text;

 

namespace ConsoleApplication2

{

    class Student:IComparable//實現系統自帶的IComparable接口

    {

        private string name;

        private int age;

        public Student(string name, int age)

        {

            this.name = name;

            this.age = age;

        }

        public string Name

        {

            get

            {

                return name;

            }

            set

            {

                name = value;

            }

        }

        public int Age

        {

            get

            {

                return age;

            }

            set

            {

                age = value;

            }

        }

        public int CompareTo(object right)

        {

            if (!(right is Student))

                throw new ArgumentException("參數類型必須爲student類型");

            return name.CompareTo(((Student)right).name);

        }

        public override string ToString()//如果不重寫此方法將返回的是類型

        {

            return name;

        }

    }

    class Program

    {

        static void Main(string[] args)

        {

            Student[] arr =new Student[5];

            arr[0] = new Student("張三", 5);

            arr[1] = new Student("李四", 3);

            arr[2] = new Student("王五", 4);

            arr[3] = new Student("趙六", 2);

            arr[4] = new Student("錢七", 1);

            Array.Sort(arr);//調用Array類的靜態方法Sort

            foreach (Student i in arr)

                Console.WriteLine(i);

        }

    }

}

 

 

 

 

 

.NET Framework (代碼庫、通用類型系統CTSCLR)

 

    編譯

C#————>程序集(.exe.dll[MSIL])、元信息[數據信息]、可選資源[圖片、聲音])

             |                 |

             |                 (Microsoft Intermediate Language 微軟中間語言)

             |

             | JIT編譯 (Just-In-Time 僅在需要時才編譯MSIL)

             |

             ——> 機器代碼 <———— .NET CLR (Common Language Runtime 公共語言運行庫)

                               運行     /   \

                                       /     \

                                     託管  非託管

                                    (C#)     (C++)

 

 

總結:

 

一、用C#.NET兼容語言編寫代碼

 

              編譯

二、      C#————>程序集

 

              JIT編譯

三、  程序集—————>機器代碼

 

               運行

四、  託管CLR————>機器代碼

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章