[問題] 基礎類別物件 轉 衍生類別物件
各位好
我自己定義一個基礎類別BaseClass 和 衍生類別DerdivedClass
public class BaseClass {}
public class DerdivedClass : BaseClass {}
如下 我把BaseClass 轉成DerivedClass 會出錯
DerivedClass A2 = (DerivedClass)new BaseClass();
但如果是底下寫法 就不會有錯
Button btn = (Button)this.FindControl("Button1");
FindControl所回傳的是Control 因為 Button : WebControl 且 WebControl : Control
所以 對Button來說 Control是基礎類別 Button是衍生類別
那為什麼
DerivedClass A2 = (DerivedClass)new BaseClass(); 會出錯
Button btn = (Button)this.FindControl("Button1"); 卻不會出錯呢?
程式碼
https://www.sendspace.com/file/gslh86
謝謝
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 1.175.206.19
※ 文章網址: https://www.ptt.cc/bbs/C_Sharp/M.1499582386.A.E8F.html
推
07/09 14:52, , 1F
07/09 14:52, 1F
→
07/09 14:53, , 2F
07/09 14:53, 2F
→
07/09 14:53, , 3F
07/09 14:53, 3F
https://stackoverflow.com/questions/2889158/how-can-i-use-profilebase-class
public class UserProfile : ProfileBase
{
public static UserProfile GetUserProfile(string username)
{
return Create(username) as UserProfile;
}
...............
}
謝謝 會有這個疑問 也是因為不了解為什麼Create()後可以轉UserProfile?
因為Create()後 回傳的type是ProfileBase
你上述Button1本身就是一個Button...這段敘述 我好像可以理解
但Create() 本身就是UserProfile嗎? 是這樣解釋嗎? 還是?
※ 編輯: kisha024 (1.175.206.19), 07/09/2017 20:01:11
推
07/09 21:27, , 4F
07/09 21:27, 4F
→
07/09 21:27, , 5F
07/09 21:27, 5F
→
07/09 21:27, , 6F
07/09 21:27, 6F
推
07/09 21:29, , 7F
07/09 21:29, 7F
→
07/09 21:29, , 8F
07/09 21:29, 8F
推
07/09 21:31, , 9F
07/09 21:31, 9F
推
07/09 21:36, , 10F
07/09 21:36, 10F
→
07/09 21:36, , 11F
07/09 21:36, 11F
謝謝您的比喻 我覺得很貼切
但我的問題在於不知道那個方法是找電器的方法 還是找冰箱的方法?
從FindControl這個字眼上來看 的確是找控制項的方法
只是剛好找到Button 就說他是Button
但判斷一個方法要找的東西是什麼 該怎麼判斷呢?
請您看一下上面那個Create()方法ProfileBase
Create()是要創造ProfileBase 只是剛好所創的是UserProfile
所以就說他是UserProfile 是這樣解釋嗎?
※ 編輯: kisha024 (1.175.206.19), 07/09/2017 22:18:38
推
07/09 22:36, , 12F
07/09 22:36, 12F
→
07/09 22:37, , 13F
07/09 22:37, 13F
→
07/09 23:34, , 14F
07/09 23:34, 14F
推
07/10 02:21, , 15F
07/10 02:21, 15F
→
07/10 02:22, , 16F
07/10 02:22, 16F
→
07/10 02:23, , 17F
07/10 02:23, 17F
→
07/10 02:23, , 18F
07/10 02:23, 18F
推
07/10 06:10, , 19F
07/10 06:10, 19F
推
07/10 06:32, , 20F
07/10 06:32, 20F
您的意思是 用is和as去判斷create()後回傳值是ProfileBase或UserProfile嗎?
create的傳入值是個string 您的意思是 光靠傳入的string不同
就足以影響回傳的值是ProfileBase或UserProfile嗎?
推
07/10 22:42, , 21F
07/10 22:42, 21F
→
07/10 22:42, , 22F
07/10 22:42, 22F
謝謝 很明顯會失敗
推
07/11 23:20, , 23F
07/11 23:20, 23F
→
07/11 23:21, , 24F
07/11 23:21, 24F
→
07/11 23:21, , 25F
07/11 23:21, 25F
→
07/11 23:21, , 26F
07/11 23:21, 26F
感謝 您太客氣了
※ 編輯: kisha024 (60.251.130.137), 07/13/2017 16:48:14
C_Sharp 近期熱門文章
PTT數位生活區 即時熱門文章