程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> C#中abstract的用法詳解

C#中abstract的用法詳解

編輯:C#入門知識

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

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved