一、隱式轉換:子類轉換成父類
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作為管理元件,執行在宿主機的作業系統中,擁有最高特權級別,而虛擬機...