一、抽象類與接口 1、類似處:他們都包含可以由派生類繼承的成員。都不能實例化,但可以聲明他們的變量。如果這樣做,就可以使用多態性把繼承這兩中類型的對象指定給他們的變量。接著通過這些變量來使用這些類型的成員,但不能直接訪問派生對象的其它成員。
2、區別:派生類只能繼承一個基類,即只能直接繼承一個抽象類,但可以通過一個繼承鏈來包含多個抽象類。相反,類可以使用任意多個接口。 按照定義,接口成員是公共的(因為它們傾向于外部使用),但抽象類的成員可以是私有的、受保護的、內部的或受保護的內部成員。 此外,接口不能包含字段、構造函數、靜態成員或常量 。
3、這說明這兩種類型用于完全不同的目的。抽象類主要用作對象系列的基類,共享某些主要的特性,例如共同的目的和結構。接口則主要用于類,這些類在基礎水平上有所不同,但仍可以完成某些相同的任務。
舉例說明:假如有一個對象系列表現火車,基類Train包含火車的核心定義,比如輪胎和引擎規格。但這個類是抽象的,我們不能開著這樣的火車 。所以,我們給它添加一些特性(真實的發動機、好的輪胎),得到了“蒸汽”和“汽油”火車兩個派生類 Train_A 和 Train_B 。
接著,我們來考慮,汽車做好了,我們可以用來做什么?對,搭乘客,裝貨物,而這兩種方法我們可以
放在接口 Interface 中,這樣他們就有了共同的任務。
二、結構類型
1、結構和類非常相似,但結構是值類型的,類是引用類型的,這意味著什么?舉例說明:
namespace exmaple_1
{
class Myclass
{
publlic int val ;
}
struct myStruct
{
public int val;
}
class PRogram
{
static void Main(String[] args)
{
Myclass A = new Myclass() ;
Myclass B = A;
A.val=10;
B.val=20;
myStruct C = new myStruct() ;
myStruct D = C ;
C.val=30;
D.val=40;
Console.WriteLine("A.val={0}", A.val) ;
Console.WriteLine("B.val={0}", B.val) ;
Console.WriteLine("C.val={0}", C.val) ;
Console.WriteLine("D.val={0}", D.val) ;
Console.ReadKey() ;
}
}
運行后,得到的結果是 : A.val =20, B.val=20 , C.val=30, D.val=40 。
新聞熱點
疑難解答