日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > C# >内容正文

C#

【C#】C#抽象类及其方法

發布時間:2025/3/20 C# 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【C#】C#抽象类及其方法 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、解釋1

在C#中使用關鍵字 abstract 來定義抽象類和抽象方法。

不能初始化的類被叫做抽象類,它們只提供部分實現,但是另一個類可以繼承它并且能創建它們
的實例。


"一個包含一個或多個純虛函數的類叫抽象類,抽象類不能被實例化,進一步
一個抽象類只能通過接口和作為其它類的基類使用."- C++ Programming Language by Stroustrup Chapter13.2

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

?

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;
??????? }
??? }

例如,一個包含非抽象方法的抽象類:

?

??? 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'
??????? }
??? }


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

一個抽象方法是一個沒有方法體的方法。

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();
??????? }
??? }


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


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#中,一個抽象類能夠繼承另一個非抽象類,另外,繼承了基類的方法,添加新的
抽象和非抽象方法是可行的。


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();
??????? }
??? }

一個抽象類也能從一個接口來實現,這種情況,我們必須為所有的方法提供方法體,這些方法是來自接口


??? 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();
??????? }
??? }

我們不能把關鍵字abstract 和 sealed 一起用在C#中,因為一個密封類不能夠被抽象。

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.一個抽象方法可以看作是一個虛函數。

2.抽象方法的聲明只能在抽象類中。

3.因為抽象方法聲明只提供一個無實現的方式,沒有方法體

4.方法體的實現被覆寫方法提供,覆寫方法是一個非抽象類的成員。

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

6.在一個靜態屬性中使用abstract 是一個錯誤。

??????? *一個抽象屬性能夠通過派生類使用 override 實現.

對于抽象類:

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

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


抽象類具有以下特征:

1.抽象類不能被實例化。

2.抽象類可以包含抽象方法和訪問器

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

4.一個派生于一個抽象類的非抽象類必須包括所有的繼承來的抽象方法和訪問器的實現

5.在方法和屬性中使用abstract 關鍵字意味著包含它們的實現。

二、解釋2

//抽象方法:只包含方法定義,但沒有具體實現的方法,需要其子類或者子類的子類來具體實現。 //靜態方法不能標記為 override、virtual 或 abstract,即靜態方法都必須是具體的 /抽象類:含有一個或多個抽象方法的類稱為抽象類,在聲明時,類名前須添加"abstract"關鍵字 //抽象類中可以包含非抽象方法 //抽象類不能夠被實例化,這是因為它包含了沒有具體實現的方法,即可實例化的類一定不是抽象類,不包含未具體實現的抽象方法。 //子類繼承抽象父類后,可以使用override關鍵字覆蓋父類中的抽象方法,并做具體的實現。也可以不實現抽象方法,留給后代實現,這時子類仍舊是一個抽象類,必須聲明為abstract //繼承的抽象方法不可以被隱藏 //隱藏:在子類中創建與父類中的方法具有相同簽名(相同的方法名,相同的參數列表--參數類型和次序)的方法(可以帶有"virtual"或"override"關鍵字)即可實現,但建議使用"new"關鍵字,以明確地隱藏。 //只能使用"override"關鍵字來覆蓋(override)父類中標記為"virtual"、"abstract"或"override"的方法,而子類中標記為override的方法,也必須是父類中標記為"virtual"、"abstract"或"override"的方法。 //覆蓋(override):必須使用override關鍵字,可以被覆蓋的方法包括標記為abstract,virtual,和override的方法; //隱藏:使用new關鍵字,也可不使用關鍵字,可以被隱藏的方法包括一般方法,和標記為virtual"或"override"的方法; //重載(overload):不需要任何特殊的關鍵字 //靜態方法可以被隱藏或重載 三、解釋3 1、聲明一個抽象方法使用abstract關鍵字。
2、一個類中可以包含一個或多個抽象方法。
3、抽象類中可以存在非抽象的方法。
4、抽象類不能被直接被實例化。
5、實現抽象類用“:”(冒號),實現抽象方法用override關鍵字。
6、抽象類可以被抽象類所繼承,結果仍是抽象類。
7、抽象方法被實現后,不能更改修飾符。

using System;

namespace Abstract_for
{

/// <summary>
/// 抽象類 Abc
/// </summary>
abstract class Abc
{
public abstract void Afunc();//聲明了抽象方法,但不實現

public void Bfunc()
{
Console.WriteLine("非抽象方法!");
}
}

/// <summary>
/// 抽象類Abc的派生類Derv
/// </summary>
class Derv:Abc
{//此類必須實現基類的抽象方法,否則必須聲明為abstract的
public override void Afunc()
{//使用override關鍵字可以在派生類中實現抽象方法!通過override聲明重寫的方法成為重寫基類方法
Console.WriteLine("實現抽象方法");
}
}
public class Test{
public static void Main(string[] args)
{
Derv d = new Derv();
d.Afunc();
d.Bfunc();
}
}

}

?

-----------------------------------------

抽象類 用abstract 形容的 抽象類不能被實例化,只能被繼承 舉例說明 //抽象類 abstract class 畫圖類 { public void 畫圖 {} } //繼承類 class 畫三角類 :畫圖類 { public void 畫圖 { //實現畫三角的方法 } //繼承類 class 畫圓類 :畫圖類 { public void 畫圖 { //實現畫圓的方法 } } ok ! 畫圖類 paint1 = new 畫三角類() ; paint1.畫圖();//畫三角 畫圖類 paint2 = new 畫圓類() ; paint2.畫圖();//畫圓

?

轉自:http://www.cnblogs.com/cuishao1985/archive/2009/12/30/1636190.html

轉載于:https://www.cnblogs.com/xixi-/p/5299619.html

與50位技術專家面對面20年技術見證,附贈技術全景圖

總結

以上是生活随笔為你收集整理的【C#】C#抽象类及其方法的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 欧美久久久久久久久久久 | 98色| 日韩免费观看 | 香港一级淫片免费放 | 国模无码视频一区二区三区 | 日日干夜夜拍 | 五月婷综合 | www.三级.com | 国产中文字幕免费 | 色偷偷91| 国产麻豆成人传媒免费观看 | 97公开免费视频 | 天堂在线观看av | 在线观看毛片网站 | 俄罗斯porn | 久操超碰 | 肉肉视频在线观看 | 国产精品久久婷婷六月丁香 | 二区在线观看 | 国产无遮挡免费视频 | 亚洲理论在线 | 精品国内自产拍在线观看视频 | 国精产品一区一区三区 | 欧美日韩成人一区二区 | 黄色福利 | 欧美肥老妇视频九色 | 视频福利在线观看 | 激情福利视频 | 无码人妻丰满熟妇区毛片18 | 久久久精品日本 | 成人午夜激情网 | 日韩激情av | 五月婷婷六月丁香综合 | 亚洲av永久无码精品 | 性xxxxx大片免费视频 | 调教一区| 欧美三级电影在线观看 | 嫩草免费视频 | 久操热线| 五月婷婷狠狠爱 | 日本在线视频不卡 | 国产精品美女高潮无套 | 中国成人av | 住在隔壁的她动漫免费观看全集下载 | 麻豆日韩| 两性午夜免费视频 | 亚洲精品无码永久在线观看 | 国产精品久久综合视频 | 日韩av手机在线观看 | 国产精品一区二区白浆 | 黄色网址在线免费看 | 一级女性全黄久久生活片免费 | 精品人妻伦一二三区免费 | 欧美一区在线视频 | 久久免费视屏 | 一级做a爱片久久毛片 | 男女污污视频在线观看 | 欧美乱码精品一区二区 | 天天干夜夜玩 | 猛男被粗大男男1069 | 午夜aaa片一区二区专区 | 综合一区 | 人人叉人人 | 最新日韩在线 | 免费高清欧美大片在线观看 | 一本色道久久综合精品婷婷 | 久久精品亚洲 | 青草一区 | 贝利弗山的秘密1985版免费观看 | 国产黄色网址在线观看 | 欧美另类天堂 | 精品黄网| 日韩美女黄色片 | 欧美精品自拍 | 青青视频一区二区 | 成人精品免费在线观看 | 中文字幕日日夜夜 | 国产精品亚洲成在人线 | 无码一区二区波多野结衣播放搜索 | 无码精品人妻一区二区三区湄公河 | 哺乳援交吃奶在线播放 | 成人国产一区二区三区精品麻豆 | 国产靠逼网站 | 每日在线观看av | 超碰在线人 | 欧美污视频 | 亚洲午夜福利一区二区三区 | 色呦呦麻豆 | 一级欧美一级日韩 | 一区二区精彩视频 | www.欧美一区二区三区 | 色婷婷在线影院 | 日韩视频一二三区 | 精品国产伦一区二区三 | 午夜激情电影院 | www天堂在线 | 我要色综合天天 | 男女操操视频 | 鲁一鲁一鲁一鲁一av |