C_Sharp 板


LINE

各位好 我自己定義一個基礎類別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://webptt.com/m.aspx?n=bbs/C_Sharp/M.1499582386.A.E8F.html
1F:推 J002: A2 new出來後是BaseClass,不是DerivedClass,所以會出錯 07/09 14:52
2F:→ J002: 但Button1本身就是一個Button,只是用FindControl找他的時候 07/09 14:53
3F:→ J002: 會用Control這類別去找,所以從Control轉成Button時不會出錯 07/09 14:53
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
4F:推 s4300026: 這正常吧? 首先,冰箱是電器的一種,但冰箱不是電器, 07/09 21:27
5F:→ s4300026: 這就是基底與衍伸的差別,然後你有個找電器的方法,找 07/09 21:27
6F:→ s4300026: 到一個冰箱,然後你說它是一個冰箱,這樣有什麼問題嗎? 07/09 21:27
7F:推 s4300026: 然後你的new是你有一個電器,但你說它是冰箱,那就會出 07/09 21:29
8F:→ s4300026: 錯啦! 07/09 21:29
9F:推 s4300026: 因為它可能是電視啊! 07/09 21:31
10F:推 s4300026: 然後像我回傳值都是用object基底在溝通,然後再進行is,a 07/09 21:36
11F:→ s4300026: s後處理 07/09 21:36
謝謝您的比喻 我覺得很貼切 但我的問題在於不知道那個方法是找電器的方法 還是找冰箱的方法? 從FindControl這個字眼上來看 的確是找控制項的方法 只是剛好找到Button 就說他是Button 但判斷一個方法要找的東西是什麼 該怎麼判斷呢? 請您看一下上面那個Create()方法ProfileBase Create()是要創造ProfileBase 只是剛好所創的是UserProfile 所以就說他是UserProfile 是這樣解釋嗎? ※ 編輯: kisha024 (1.175.206.19), 07/09/2017 22:18:38
12F:推 vi000246: 這就跟float能轉int 但int不能轉float一樣的道理 07/09 22:36
13F:→ vi000246: 可以google一下裝箱跟拆箱 07/09 22:37
14F:→ IKAFIRE: float int互轉和裝拆箱無關,完全是另一個議題 07/09 23:34
15F:推 shadow0326: 這是工廠方法的一種,Create和FindControl這兩個API都 07/10 02:21
16F:→ shadow0326: 傳入你想要的物件名稱了,所以得到的會是子物件的實體 07/10 02:22
17F:→ shadow0326: 以前前面的例子來說,假設電器行提供一個"買電器"的 07/10 02:23
18F:→ shadow0326: API,你都說要買冰箱了,買到的電器就會是冰箱 07/10 02:23
19F:推 s4300026: 有判斷的機制,叫做是否(is)和視為(as), 這是關鍵字喔~ 07/10 06:10
20F:推 s4300026: create的傳入值就是問你要哪種物品 07/10 06:32
您的意思是 用is和as去判斷create()後回傳值是ProfileBase或UserProfile嗎? create的傳入值是個string 您的意思是 光靠傳入的string不同 就足以影響回傳的值是ProfileBase或UserProfile嗎?
21F:推 s4300026: 我覺得應該是,但你可以試試看尋找別類控制項,然後轉 07/10 22:42
22F:→ s4300026: 型成button看看會不會失敗 07/10 22:42
謝謝 很明顯會失敗
23F:推 J002: 如果是您提到的stackoverflow中講的UserProfile,我想應該與 07/11 23:20
24F:→ J002: 他後面提到的web.config有關,他有直接在web.config中設定 07/11 23:21
25F:→ J002: profile的部份 07/11 23:21
26F:→ J002: 抱歉,拖到今天才看到@@" 07/11 23:21
感謝 您太客氣了 ※ 編輯: kisha024 (60.251.130.137), 07/13/2017 16:48:14







like.gif 您可能會有興趣的文章
icon.png[問題/行為] 貓晚上進房間會不會有憋尿問題
icon.pngRe: [閒聊] 選了錯誤的女孩成為魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一張
icon.png[心得] EMS高領長版毛衣.墨小樓MC1002
icon.png[分享] 丹龍隔熱紙GE55+33+22
icon.png[問題] 清洗洗衣機
icon.png[尋物] 窗台下的空間
icon.png[閒聊] 双極の女神1 木魔爵
icon.png[售車] 新竹 1997 march 1297cc 白色 四門
icon.png[討論] 能從照片感受到攝影者心情嗎
icon.png[狂賀] 賀賀賀賀 賀!島村卯月!總選舉NO.1
icon.png[難過] 羨慕白皮膚的女生
icon.png閱讀文章
icon.png[黑特]
icon.png[問題] SBK S1安裝於安全帽位置
icon.png[分享] 舊woo100絕版開箱!!
icon.pngRe: [無言] 關於小包衛生紙
icon.png[開箱] E5-2683V3 RX480Strix 快睿C1 簡單測試
icon.png[心得] 蒼の海賊龍 地獄 執行者16PT
icon.png[售車] 1999年Virage iO 1.8EXi
icon.png[心得] 挑戰33 LV10 獅子座pt solo
icon.png[閒聊] 手把手教你不被桶之新手主購教學
icon.png[分享] Civic Type R 量產版官方照無預警流出
icon.png[售車] Golf 4 2.0 銀色 自排
icon.png[出售] Graco提籃汽座(有底座)2000元誠可議
icon.png[問題] 請問補牙材質掉了還能再補嗎?(台中半年內
icon.png[問題] 44th 單曲 生寫竟然都給重複的啊啊!
icon.png[心得] 華南紅卡/icash 核卡
icon.png[問題] 拔牙矯正這樣正常嗎
icon.png[贈送] 老莫高業 初業 102年版
icon.png[情報] 三大行動支付 本季掀戰火
icon.png[寶寶] 博客來Amos水蠟筆5/1特價五折
icon.pngRe: [心得] 新鮮人一些面試分享
icon.png[心得] 蒼の海賊龍 地獄 麒麟25PT
icon.pngRe: [閒聊] (君の名は。雷慎入) 君名二創漫畫翻譯
icon.pngRe: [閒聊] OGN中場影片:失蹤人口局 (英文字幕)
icon.png[問題] 台灣大哥大4G訊號差
icon.png[出售] [全國]全新千尋侘草LED燈, 水草

請輸入看板名稱,例如:WOW站內搜尋

TOP