C#中 父类与子类相互强制转换之实验
为了让更多和我一样,还在学习过程中的朋友能省时间,在此献丑了,如果你是高手,请指导,不要打击菜鸟的积极性。
代码里有详细的注释,所以就直接上代码了。
| using System; using System.Collections; using System.Configuration; using System.Data; using System.Linq; using System.Web; using System.Web.Security; using System.Web.UI; using System.Web.UI.HtmlControls; using System.Web.UI.WebControls; using System.Web.UI.WebControls.WebParts; using System.Xml.Linq; namespace WebApplication3 { /// <summary> /// a类故意定义2个field /// </summary> public class a { public string itema1 { get; set; } public string itema2 { get; set; } public string PrintItem() { return itema1 + itema2; } } /// <summary> /// b类故意定义1个field,加上继承a类的,共3个field /// </summary> public class b : a { public string itemb1 { get; set; } public string PrintItemb() { return itema1 + itema2 + itemb1; } } public partial class WebForm1 : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { //接下来,我们测试一下,将a类和b类实例化,并赋给不同的值。 a aa = new a() { itema1="a1",itema2="a2"}; b bb = new b() { itemb1="b1",itema1="ba1",itema2="ba2"}; a abc = (a)bb;//将有3个field的bb实例,强制转换为只有2个field的a类的abc实例。 //测试一下:会不会像实例生活中,a类袋子只能装2个包子,b类袋子可以装3个包子。 //现将装3个包子的bb袋子,装进只能装2个包子的abc袋子,会不会抛弃掉一个包子。 //结果证明,不会抛弃,只是在abc袋子中,我们只能取出2个包子,而当我们再将abc袋子,强制转换并装回b类袋子的新实例bbc袋子时,3个包子又回来了。 b bbc=(b)abc; // b dbb = (b)aa;//这里会出错!!提示“无法将类型为“WebApplication3.a”的对象强制转换为类型“WebApplication3.b” //像上面的包子的比喻,如果没有首先将b类袋子的3个包子放进a类袋子,而是直接将a类袋子,强制转换为b类袋子,那是不行的。先从b到a再到b,这是可行的。 Label1.Text= aa.PrintItem(); Label2.Text = bb.PrintItemb(); Label3.Text = abc.PrintItem(); Label4.Text = bbc.PrintItem(); Label5.Text= bbc.PrintItemb(); // Label6.Text = dbb.PrintItem(); // Label7.Text = dbb.PrintItemb(); } } /*运行输出结果为: a1a2 ba1ba2b1 ba1ba2 ba1ba2 ba1ba2b1 */ } |
浙公网安备 33010602011771号