C#面向對象--類

  1、類(Class)是CTS中五種基本類型之一,是一種引用類型,封裝了同屬一個邏輯單元的數據(Data)和行爲(Behavior),這些數據和行爲經過類中的成員表示;使用class關鍵字定義類:ide

//定義一個公共類MyClass
public class MyClass
{
    public int MyField; //聲明一個int類型的公共實例字段
    public void MyFunc() //聲明一個公共實例方法
    {
        /do…
    }
}
//建立類MyClass的實例並賦值給MyClass類型的變量myObj
MyClass myObj = new MyClass();

  1.在命名空間中定義的類默認爲內部類,即internal class,此時只有當前項目中的代碼才能訪問它;一般狀況下會將類指定爲公共類,即public class,此時能夠由其餘項目中的代碼來訪問它;函數

  ※在命名空間中定義的類只能爲public或internal,在其它類型內部定義的類爲該類型的嵌套類型,能夠指定任何訪問修飾符;優化

 

  2、在定義類時,還能夠指定類是抽象類或密封類,兩者不可同時指定;spa

  1.抽象類,即abstract class,不能被實例化,只能被繼承;code

  ※抽象類中能夠聲明抽象成員(只有抽象類中才能夠聲明抽象成員),也能夠聲明任意非抽象成員(雖然沒法實例化,但能夠聲明構造函數和析構函數);抽象成員包括方法、屬性、事件和索引器,抽象成員不提供實現,沒有方法體,抽象成員不能是私有的,繼承自抽象類的非抽象類必須經過關鍵字override實現基類中的抽象成員;blog

public abstract class MyAbstractClass //定義一個公共抽象類MyAbstractClass
{
    public abstract void MyFunc(); //聲明一個公共抽象方法MyFunc
    public abstract int MyProperty //聲明一個公共抽象屬性MyProperty,聲明抽象屬性時只須要聲明須要的訪問器便可,在派生類中重寫抽象屬性時也只能重寫抽象基類中存在的訪問器
    {
        get;
    }
}
public class MyClass : MyAbstractClass //定義一個公共類MyClass繼承自抽象類MyAbstractClass
{
    public override void MyFunc() //實現抽象基類中的抽象方法
    {
        //do…
    }
    public override int MyProperty //實現抽象基類中的抽象屬性
    {
        get;
    }
}

  ※雖然抽象類不能直接經過new運算符實例化,但經過隱式轉換能夠將繼承自抽象類的類的實例轉換爲抽象類的變量:繼承

MyAbstractClass myObj = new MyClass(); //建立MyClass類型的實例,隱式轉換爲MyAbstractClass

  ※抽象類同非抽象類同樣能夠繼承其它任何可訪問的非密封類,當抽象類繼承的基類中包含虛方法時,抽象類可使用抽象方法重寫該虛方法,此時在抽象類的派生類中沒法訪問基類中的該虛方法,經過這種方式,抽象類能夠強制派生類提供基類中該虛方法的新實現:索引

public class MyClass
{
    public virtual void MyFunc()
    {
        //do…
    }
}
public abstract class MyAbstractClass : MyClass
{
    public abstract override void MyFunc();
}
public class MyDerivedClass : MyAbstractClass
{
    public override void MyFunc()
    {
        //do…
    }
}

  2.密封類,即sealed class,不能被繼承;接口

public sealed class MyClass { }

  ※密封類中不能夠聲明虛成員;若是聲明瞭protected、protected internal或private protected成員會產生編譯器警告CS0628;事件

  ※因爲密封類歷來不用做基類,因此有些運行時優化能夠略微提升密封類成員的訪問速度;

 

  3、在定義類時,還能夠定義靜態類,即static calss,靜態類與非靜態類基本相同,但存在如下區別:

  ※靜態類不能實例化,默認即爲密封的,不能被繼承,靜態類也不能繼承其它類(默認繼承自Object)或實現任何接口;

  ※靜態類只能包含靜態成員,始終使用類名訪問靜態類的成員;

  ※靜態類不包含實例構造函數,但能夠包含靜態構造函數,與非靜態類同樣,靜態類也只能聲明一個無參的靜態構造函數,不帶訪問修飾符也不含參數:static MyClass() { };

  ※在程序運行時,會在首次引用靜態類以前初始化其字段並調用其靜態構造函數,靜態構造函數只調用一次,在程序所駐留的程序域的生存期內,靜態類會保留在內存中

 


若是您以爲閱讀本文對您有幫助,請點一下「推薦」按鈕,您的承認是我寫做的最大動力!

做者:Minotauros
出處:https://www.cnblogs.com/minotauros/

本文版權歸做者和博客園共有,歡迎轉載,但未經做者贊成必須保留此段聲明,且在文章頁面明顯位置給出原文鏈接,不然保留追究法律責任的權利。

相關文章
相關標籤/搜索