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/cn.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灯, 水草

请输入看板名称,例如:iOS站内搜寻

TOP