C#類型詳解

1、類型成員

類成員定義有(public、private、internal、protected)。html

Public--對任何類和成員都是公開的,無限制c#

Private--是私有的,僅能由類內部代碼訪問,若是沒有聲明,默認使用此關鍵字數組

Internal--僅能在所屬命名空間內部訪問安全

Protected--能夠由類或者其派生類中的代碼訪問性能

類成員--字段、方法、屬性spa

public class MyClass

    {

        public int MyInt = 2019;//字段

        public static string MyMain()

        {

            return "這是方法";

        }

        public int MyProperty { get; set; }//屬性

}

 

字段--一個只讀、可讀/寫的數據值線程

方法--對類型或對象狀態數據操做的一個過程實現設計

屬性--它能夠像方法同樣操做類或對象的狀態數據,但看上去卻像字段同樣的書寫方式指針

2、類型操做(隱式轉換、顯示轉換、裝箱、拆箱)

隱式轉換--對於內置數值類型,若是要存儲的值無需截斷或四捨五入便可適應變量,則能夠進行隱式轉換、小精度數據轉大精度也可進行隱式轉換code

Int  Num=100;

Long Bignum= Num;

 

顯示轉換--顯示轉換也稱爲強制轉換,強制轉換是顯式告知編譯器你打算進行轉換且你知道可能會發生數據丟失的一種方式。

Double Num=100.1;

Int a;

a=int.Parse(Num);

 

顯示轉換存在必定的風險性,如若出現失誤可能會拋出異常或者影響整個結果的精確性。假如在不知a的類型的狀況下進行顯示轉換,可是轉換失敗則會引發程序拋出異常。

var a = "yi";

int b = int.Parse(a);

 

這是能夠嘗試使用TryParse,這裏返回的是一個bool,轉換成功則True

var a = "yi";

int b;

int.TryParse(a, out b);

 

類型操做轉換--裝箱、拆箱

public void Test()

        {

            //裝箱

            int a = 1;

            object obj = a;

 

            //拆箱

            object obj2 = 2;

            int b = (int)obj2;

}

 

首先咱們得了解,值類型是分配在線程棧中的,不受垃圾回收機制管理。而引用類型分配在託管堆中的。

 

裝箱--簡單來講值類型轉換引用類型是裝箱,詳細來講是。先在託管內存中分配內存,而後將值類型的值複製到內存堆中,而後返回新對象的地址,這一過程爲裝箱。

拆箱--拆箱並非裝箱的逆過程,簡單說也是引用類型轉換爲值類型爲拆箱,詳細來講拆箱是獲取爲裝箱部分的指針,而後將未裝箱部分的值複製到堆棧中。

3、類型轉換(Is,As)

類型轉換操做符--is、as

as--是將一個對象從一種類型轉換爲另外一種類型,若是轉換成功則返回該類型,不然返回null

A a=new A();

B b= A as B;//轉換正常則返回B類型,轉換失敗則返回null

 

is--是判斷一種類型轉換爲另外一種類型,若是轉換成功則返回True,不然返回False。

A a=new A();

If(B is A)//返回True False

{

}

 

保險起見能夠先用is對類型轉換進行判斷而後再使用as進行類型轉換。固然這樣的話可能會形成更新的性能消耗。

更簡單的一次驗證並安全的操做:

A a=new A();

B b= A as B;

if(B!=null){}

else{}

 

4、類型分類

一切皆對象,每個對象都對應一個類,全部的類都有一個基類--Object-System.Object

而後其下又可分爲值類型(基本數據類型)、引用類型。

值類型:整型、浮點型、字符型、布爾型、結構體、枚舉

引用類型:數組、字符串、類、接口、委託

關於類型的詳解將在下一節中詳細講出。

5、擴展延伸(抽象類、類)

在這裏咱們詳細講解下類以及抽象類。同時與接口直接的區別和相同。

類-抽象類:

一、均可被繼承

二、抽象類不能被實例化,只是用來繼承的,普通類能夠實例化

三、抽象類只含有方法聲明,沒有方法體。而且只能存在於抽象類中

四、繼承抽象類的子類必須實現抽象方法,除非子類也是抽象類

五、抽象類中能夠包含抽象方法和實例方法

接口-抽象類:

相同

一、均可被繼承

二、均可以有聲明不實現的方法

三、都不可被實例化

四、子類必須實現其聲明的方法

不一樣:

一、一個類能夠繼承多個接口,可是僅能繼承一個抽象類

二、抽象類可包含實例方法,接口不可包含

三、接口支持回調,抽象類不支持

既然有類、抽象類、接口,那麼他們分別在何時使用呢?

類不用說了吧,普通狀況下使用便可。

抽象類--若是須要設計大的功能單元,則使用抽象類。抽象類主要用於關係密切的對象。

接口--若是設計小而簡練的功能塊的話可使用接口,接口適合爲不想關的類提供通用功能

舉個例子:一個圍欄之間有不少的小動物,豬、狗、雞、貓。針對這個咱們設計一段程序,豬、狗、雞、貓其都是動物,根據抽象類-設計大的功能單元。咱們能夠設計一個動物類的抽象類。而後在各自繼承下去寫本身的具體類(豬類、狗類、雞類、貓類)。那麼咱們要研究他們的叫聲,這裏設計小的功能模塊。咱們就可使用接口來設計一個叫聲。而後每一個每一個東西去實現不一樣的叫聲(豬叫、狗叫、雞叫、貓叫)。設計實現大的功能單元咱們選擇抽象類,設計實現小而簡練的功能塊咱們選擇使用接口。

總結:

c#基礎知識詳解系列

相關文章
相關標籤/搜索