C#中abstract的用法詳解。本站提示廣大學習愛好者:(C#中abstract的用法詳解)文章只能為提供參考,不一定能成為您想要的結果。以下是C#中abstract的用法詳解正文
abstract可以用來修飾類,辦法,屬性,索引器和時間,這裡不包括字段. 運用abstrac修飾的類,該類只能作為其他類的基類,不能實例化,而且abstract修飾的成員在派生類中必需全部完成,不允許局部完成,否則編譯異常. 如:
using System; namespace ConsoleApplication8 { class Program { static void Main(string[] args) { BClass b = new BClass(); b.m1(); } } abstract class AClass { public abstract void m1(); public abstract void m2(); } class BClass : AClass { public override void m1() { throw new NotImplementedException(); } //public override void m2() //{ // throw new NotImplementedException(); //} } }
Abstract classes have the following features:
籠統類擁有如下特征:
1,籠統類不能被實例化, 但可以有實例結構函數, 類能否可以實例化取決於能否擁有實例化的權限 (關於籠統類的權限是abstract, 制止實例化),
即便不提供結構函數, 編譯器也會提供默許結構函數;
2,籠統類可以包括籠統辦法和訪問器;
3,籠統類不能運用sealed修飾, sealed意為不能被承繼;
4,一切承繼自籠統類的非籠統類必需完成一切的籠統成員,包括辦法,屬性,索引器,事情;
abstract修飾的辦法有如下特征:
1,籠統辦法即是虛擬辦法(隱含);
2,籠統辦法只能在籠統類中聲明;
3,由於籠統辦法只是聲明, 不提供完成, 所以辦法只以分號完畢,沒無方法體,即沒有花括號局部;如
public abstract void MyMethod();
4,override修飾的掩蓋辦法提供完成,且只能作為非籠統類的成員;
5,在籠統辦法的聲明上不能運用virtual或許是static修飾.即不能是靜態的,又由於abstract曾經是虛擬的,無需再用virtual強調.
籠統屬性雖然外行為上與籠統辦法類似,但仍有有如下不同:
1,不能在靜態屬性上使用abstract修飾符;
2,籠統屬性在非籠統的派生類中掩蓋重寫,運用override修飾符;
籠統類與接口:
1,籠統類必需提供一切接口成員的完成;
2,承繼接口的籠統類可以將接口的成員映射位籠統辦法.
如:
interface I { void M(); } abstract class C: I { public abstract void M(); } 籠統類實例: // abstract_keyword.cs // 籠統類 using System; abstract class BaseClass // 籠統類 { protected int _x = 100; //籠統類可以定義字段,但不可以是籠統字段,也沒有這一說法. protected int _y = 150; public BaseClass(int i) //可以定義實例結構函數,僅供派生的非籠統類調用; 這裡顯式提供結構函數,編譯器將不再提供默許結構函數. { fielda = i; } public BaseClass() { } private int fielda; public static int fieldsa = 0; public abstract void AbstractMethod(); // 籠統辦法 public abstract int X { get; } //籠統屬性 public abstract int Y { get; } public abstract string IdxString { get; set; } //籠統屬性 public abstract char this[int i] { get; } //籠統索引器 } class DerivedClass : BaseClass { private string idxstring; private int fieldb; //假如基類中沒有定義無參結構函數,但存在有參數的結構函數, //那麼這裡派生類得結構函數必需調用基類的有參數結構函數,否則編譯出錯 public DerivedClass(int p) : base(p) //這裡的:base(p)可省略,由於基類定義了默許的無參結構函數 { fieldb = p; } public override string IdxString //掩蓋重新屬性 { get { return idxstring; } set { idxstring = value; } } public override char this[int i] //掩蓋重寫索引器 { get { return IdxString[i]; } } public override void AbstractMethod() { _x++; _y++; } public override int X // 掩蓋重寫屬性 { get { return _x + 10; } } public override int Y // 掩蓋重寫屬性 { get { return _y + 10; } } static void Main() { DerivedClass o = new DerivedClass(1); o.AbstractMethod(); Console.WriteLine("x = {0}, y = {1}", o.X, o.Y); } }
以上所述是給大家引見的C#中abstract的用法詳解,希望對大家有所協助,假如大家有任何疑問請給我留言,會及時回復大家的。在此也十分感激大家對網站的支持!