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 { getset; }
        
public string itema2 { getset; }
        
public string PrintItem()
        {
            
return itema1 + itema2;
        }
    }
    
/// <summary>
    
/// b类故意定义1个field,加上继承a类的,共3个field
    
/// </summary>
    public class b : a
    {
        
public string itemb1 { getset; }


        
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
     
  
     
*/

    
}

posted @ 2014-05-24 13:00  zzg168  阅读(315)  评论(0)    收藏  举报