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的用法詳解,希望對大家有所協助,假如大家有任何疑問請給我留言,會及時回復大家的。在此也十分感激大家對網站的支持!