C 引用型別轉換的常見方式總結

2022-09-29 13:12:10 字數 1471 閱讀 7311

一、隱式轉換:子類轉換成父類

public class animal

}public class dog : animal

}客戶端,子類轉換成父類。

static void main(string args)

結果:12

可見子類轉換成了父類是隱式轉換。這種轉換在棧上完成,棧上先有代表子類的變數dog,然後有代表父類的變數animal,最後把dog儲存的堆位址賦值給了anmial。

二、強**父類轉換成子類

如果客戶端父類轉換成子類。

static void main(string args)

else

}結果:丟擲異常,animal無法轉換成dog

可見,使用以上方式把父類強轉成子類,轉換失敗會丟擲異常。

三、使用as強**父類轉換成子類

如果客戶端使用as把父類轉換成子類。

static void main(string args)

else

}結果:轉換失敗

可見,使用as把父類強程式設計客棧轉成子類,轉換失敗不會丟擲異常。 

四、使用is先判斷再強**父類轉換成子類

可以在強轉之前,先使用is判斷父類是否能轉換成子類,再根據子類例項是否為null判斷是否轉換成功。

static void main(string args)

if (dog == null)

else

}www.cppcns.com五、使用操作符實現強轉

可以在乙個類中設計乙個靜態的、隱式的、操作符方法,把本類例項轉換成另外乙個目標轉換物件例項。

public class benz

public benz(int mile)

public static implicit operator car(benz benz);}

}public class car

}客戶端static void main(string args)

結果:1000      

○ 使用操作符,把原本毫無關係的2個類建立關係,可實現轉換

○ 當執行car car = benz的時候,就會執行benz類的操作符方法operator car

○ 操作符方法必須滿足幾個條件:靜態的、implicit,名稱和需要轉換的類名保持一致,返回需要轉換的類例項

○ 當執行car car = benz的時候,在堆上建立乙個car例項,然後賦值給棧上的變數car

總結:① 子類轉換成父類是隱式轉換,其本質是棧上的乙個變數值賦值給了棧上另外乙個變數

② 父類轉換成子類,如果直接使用"(子類)父類例項"的方式,很容易丟擲異常

③ 父類轉換成子類,如果使用as,可以避免丟擲異常

④ 父類轉換成之類,也可以先使用is判斷,然後再進行轉換

⑤ 2個不是子父級關係的類,可以在1個類中設計乙個操作符方法,把該類例項轉換成目標物件例項

本文標題: c#引用型別轉換的常見方式總結

本文位址:

結束程序的常見方式

乙個程序由於以下五個因素將會導致終止 前三個都是正常終止,後面兩個為非正常終止 程序終止之後,都會執行相同的核心 這段 做的工作就是關閉開啟的檔案,釋放記憶體,和其他的清理工作。int exit int status 程序終止之後,都會執行相同的核心 這段 做的工作就是關閉開啟的檔案,釋放記憶體,和...

C 型別轉換和引用轉換

物件的引用可以被 向上轉換是指乙個從乙個基類指向乙個子類 house house new house asset asset house house類是asset的子類 這個時候隱式的向上轉換就發生了 asset類的乙個物件asset指向了它的子類house的物件house console.writ...

CPU 虛擬化的常見方式

cpu虛擬化是將乙個物理的cpu虛擬成多個虛擬cpu供虛擬機器使用。在傳統的x86指令集中,cpu有4個特權級 0 3 第0級用來執行作業系統,擁有最高的特權,第3級用來執行應用程式,擁有最低的特權級。虛擬機器執行的過程中,通常vmm作為管理元件,執行在宿主機的作業系統中,擁有最高特權級別,而虛擬機...