欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費電子書(shū)等14項超值服

開(kāi)通VIP
C#抽象類(lèi)及其方法的學(xué)習


在C#中使用關(guān)鍵字 abstract 來(lái)定義抽象類(lèi)和抽象方法。

不能初始化的類(lèi)被叫做抽象類(lèi),它們只提供部分實(shí)現,但是另一個(gè)類(lèi)可以繼承它并且能創(chuàng )建它們
的實(shí)例。

"一個(gè)包含一個(gè)或多個(gè)純虛函數的類(lèi)叫抽象類(lèi),抽象類(lèi)不能被實(shí)例化,進(jìn)一步
一個(gè)抽象類(lèi)只能通過(guò)接口和作為其它類(lèi)的基類(lèi)使用."- C++ Programming Language by Stroustrup Chapter13.2


抽象類(lèi)能夠被用于類(lèi),方法,屬性,索引器和事件,使用abstract 在一個(gè)類(lèi)聲明中表示該類(lèi)傾向要作為其它類(lèi)的基類(lèi)
成員被標示成abstract,或被包含進(jìn)一個(gè)抽象類(lèi),必須被其派生類(lèi)實(shí)現。


abstract class ShapesClass
    {
        abstract public int Area();
    }
    class Square : ShapesClass
    {
        int x, y;
        // Not providing an Area method results
        
// in a compile-time error.
        public override int Area()
        {
            return x * y;
        }
    }


例如,一個(gè)包含非抽象方法的抽象類(lèi):


    abstract class MyAbs
    {
        public void NonAbMethod()
        {
            Console.WriteLine("Non-Abstract Method");
        }
    }
    class MyClass : MyAbs
    {
    }
    class MyClient
    {
        public static void Main()
        {
            //MyAbs mb = new MyAbs();//not possible to create an instance
            MyClass mc = new MyClass();
            mc.NonAbMethod(); // Displays 'Non-Abstract Method'
        }
    }


一個(gè)抽象類(lèi)可以包含抽象和非抽象方法,當一個(gè)類(lèi)繼承于抽象類(lèi),那么這個(gè)派生類(lèi)必須實(shí)現所有的
的基類(lèi)抽象方法。

一個(gè)抽象方法是一個(gè)沒(méi)有方法體的方法。
 abstract class MyAbs
    {
        public void NonAbMethod()
        {
            Console.WriteLine("Non-Abstract Method");
        }
        public abstract void AbMethod(); // An abstract method
    }
    class MyClass : MyAbs//must implement base class abstract methods
    {
        public override void AbMethod()
        {
            Console.WriteLine("Abstarct method");
        }
    }
    class MyClient
    {
        public static void Main()
        {
            MyClass mc = new MyClass();
            mc.NonAbMethod();
            mc.AbMethod();
        }
    }


但是通過(guò)聲明派生類(lèi)也為抽象,我們可以避免所有或特定的虛方法的實(shí)現,
這就是抽象類(lèi)的部分實(shí)現。


abstract class MyAbs
    {
        public abstract void AbMethod1();
        public abstract void AbMethod2();
    }
    //not necessary to implement all abstract methods
    
//partial implementation is possible
    abstract class MyClass1 : MyAbs
    {
        public override void AbMethod1()
        {
            Console.WriteLine("Abstarct method #1");
        }
    }
    class MyClass : MyClass1
    {
        public override void AbMethod2()
        {
            Console.WriteLine("Abstarct method #2");
        }
    }
    class MyClient
    {
        public static void Main()
        {
            MyClass mc = new MyClass();
            mc.AbMethod1();
            mc.AbMethod2();
        }
    }

在C#中,一個(gè)抽象類(lèi)能夠繼承另一個(gè)非抽象類(lèi),另外,繼承了基類(lèi)的方法,添加新的
抽象和非抽象方法是可行的。


 class MyClass1 // Non-Abstract class
    {
        public void Method1()
        {
            Console.WriteLine("Method of a non-abstract class");
        }
    }
    abstract class MyAbs : MyClass1 // Inherits from an non-abstract class
    {
        public abstract void AbMethod1();
    }
    class MyClass : MyAbs//must implement base class abstract methods
    {
        public override void AbMethod1()
        {
            Console.WriteLine("Abstarct method #1 of MyClass");
        }
    }
    class MyClient
    {
        public static void Main()
        {
            MyClass mc = new MyClass();
            mc.Method1();
            mc.AbMethod1();
        }
    }

一個(gè)抽象類(lèi)也能從一個(gè)接口來(lái)實(shí)現,這種情況,我們必須為所有的方法提供方法體,這些方法是來(lái)自接口

    interface IInterface
    {
        void Method1();
    }
    abstract class MyAbs : IInterface
    {
        public void Method1()
        {
            Console.WriteLine("Method implemented from the IInterface");
        }
    }
    class MyClass : MyAbs//must implement base class abstract method
    {
    }
    class MyClient
    {
        public static void Main()
        {
        MyClass mc = new MyClass();
        mc.Method1();
        }
    } 

 我們不能把關(guān)鍵字abstract 和 sealed 一起用在C#中,因為一個(gè)密封類(lèi)不能夠被抽象。

 abstract class MyAbs
    {
        public abstract void AbMethod1();
        public abstract void AbMethod2();
    }
    class MyClass1 : MyAbs
    {
        public override void AbMethod1()
        {
            Console.WriteLine("Abstarct method #1 of MyClass1");
        }
        public override void AbMethod2()
        {
            Console.WriteLine("Abstarct method #2 of MyClass1");
        }
    }
    class MyClient
    {
        public static void Main()
        {
            MyAbs ma1 = new MyClass1();// Polymorphism
            ma1.AbMethod1();
            ma1.AbMethod2();
        }
    }

抽象方法有以下特征:

1.一個(gè)抽象方法可以看作是一個(gè)虛函數。

2.抽象方法的聲明只能在抽象類(lèi)中。

3.因為抽象方法聲明只提供一個(gè)無(wú)實(shí)現的方式,沒(méi)有方法體

4.方法體的實(shí)現被覆寫(xiě)方法提供,覆寫(xiě)方法是一個(gè)非抽象類(lèi)的成員。

5.抽象屬性的行為和抽象方法相像,除了不同的聲明形式。

6.在一個(gè)靜態(tài)屬性中使用abstract 是一個(gè)錯誤。

        *一個(gè)抽象屬性能夠通過(guò)派生類(lèi)使用 override 實(shí)現.

對于抽象類(lèi):

一個(gè)抽象類(lèi)必須為所有的接口成員提供實(shí)現
一個(gè)用于實(shí)現接口的抽象類(lèi)可能把接口方法安排到抽象方法上。例如

interface I 
{
    void M();
}
abstract class C: I 
{
    public abstract void M();
}

抽象類(lèi)具有以下特征:

1.抽象類(lèi)不能被實(shí)例化。

2.抽象類(lèi)可以包含抽象方法和訪(fǎng)問(wèn)器

3.不能把抽象類(lèi)用密封(sealed)來(lái)修飾,那就意味著(zhù)類(lèi)不能被繼承,這違反抽象類(lèi)被繼承的原則。

4.一個(gè)派生于一個(gè)抽象類(lèi)的非抽象類(lèi)必須包括所有的繼承來(lái)的抽象方法和訪(fǎng)問(wèn)器的實(shí)現

5.在方法和屬性中使用abstract 關(guān)鍵字意味著(zhù)包含它們的實(shí)現。


未完待續......   
本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請點(diǎn)擊舉報。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
LilianChen C#:抽象類(lèi)和抽象函數, 密封類(lèi)和密封方法
java學(xué)習總結-高級語(yǔ)言特性-封裝,繼承,多態(tài)
C#面向對象--類(lèi)
java經(jīng)典選擇題100例及答案
java中的重載與覆蓋及繼承
C#中的abstract,virtual,override和new
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導長(cháng)圖 關(guān)注 下載文章
綁定賬號成功
后續可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服

欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久