天歌的茅草屋  

本节主要讲C#中类的继承。

   C#中,派生类只能从一个类中继承。这是因为,在C++中,人们在大多数情况下不需要一个从多个类中派生的类。从多个基类中派生一个类这往往会带来许多问题,从而抵消了这种灵活性带来的优势。
    C#中,派生类从它的直接基类中继承成员:方法、域、属性、事件、索引指示器。除了构造函数和析构函数,派生类隐式地继承了直接基类的所有成员。

 

本节实现目标:

1.基类的实现

2.类的继承

3.在派生类中初始化基类

4.如何调用基类成员

5.如何覆盖基类成员
继承是面向对象程序设计的主要特征之一,可以让你重用代码,可以节省程序使用的时间。

 

用一个示例图直观的来表示:

 

 

 

本次示例中以人(ren)作为父类,它有眼睛和手两个变量,及一个yanjing方法

继承类为 男人(man),它有age和sex两个变量。

本次实力中继续采用了委托事件,来对触发事件进行修改

 

——————————具体CS代码——————————————

 

 

 

using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;

public partial class _Default : System.Web.UI.Page
{
    public class ren
    {
       protected int yan;//定义受保护的变量,以方便继承类调用
        protected int shou;

        public delegate void RenChengHender(string s, int e); //定义一个委托
        public event RenChengHender RenCheng; //定义一个事件
        public ren() //构造函数,给变量赋初值
        {
            yan = 1;
            shou = 2;
        }
        public ren(int y, int s)
        {
            yan = y;
            shou = s;
        }
        //属性
        public int Yan
        {
            get { return yan; }
            set
            {
                yan = value;
                string s = "yan";
                RenCheng(s, value);//如果修改了这个值,将激发事件
            }
        }
        public int Shou
        {
            get { return shou; }
            set
            {
                shou = value;
                string s = "shou";
                RenCheng(s, value);
            }
        }

        //方法
        public string yanjing(int y)
        {
            switch (y)
            {
                case 0:
                    return "没有眼睛,世界一片黑暗";
                    break;
                case 1:
                    return "传说中的独眼大虾";
                    break;
                case 2:
                    return "正常人";
                    break;
                case 3:
                    return "难道二郎神来了";
                    break;
                default:
                    return "再玩会死人的";
                    break;
            }
        }
    }
    public class man : ren  //创建一个继承类
    {
        private int age;
        private string sex;
        public man(int a, string s, int y): base(6, 888)//构造函数继承ren类中的ren(int y,int s)方法
        {
            age = a;
            sex = s;
            yan = y;
        }
         public string ManRen
        {
            get
            {
                return "一个" + sex + "人,他有" + yan + "只眼睛" + shou + "只手,他今年已经" + age + "岁了";
            }
        }
        public string suibian()
        {
            return base.Shou.ToString() + "," + this.Yan.ToString();//通过base或this访问基类成员
        }
        public string yanjing(string a, int s)
        {
            return a + "和" + s;
        }
        //这个方法和基类中的方法名和签名都一样
        public new string yanjing(int y)
        {
            string b1 = base.yanjing(y);
            return "父类方法被复写,现在返回的是" + y + "我们调用基类同名方法所得的结果为:" + b1;
        }
    }

   protected void Page_Load(object sender, EventArgs e)
    {
        ren aa = new ren(2, 2);
        aa.RenCheng+= new ren.RenChengHender(aa_RenCheng);
        aa.Yan = 3;
        aa.Shou = 2;
        Response.Write("<p>眼睛有" + aa.Yan + "只,手有" + aa.Shou);  //眼睛有3只,手有2
        Response.Write("<p>方法返回的是:" + aa.yanjing(3)); //方法返回的是:难道二郎神来了
        man mrr = new man(23, "男", 4);
        Response.Write("<p>" + mrr.ManRen); //一个男人,他有4只眼睛888只手,他今年已经23岁了
        Response.Write("<p>子类对象调用父类对方的返回值是:" + mrr.yanjing(0));    //子类对象调用父类对方的返回值是:父类方法被复写,现在返回的是0我们调用基类同名方法所得的结果为:没有眼睛,世界一片黑暗


        Response.Write("<p>子类对象调用父类对方的返回值是:" + mrr.yanjing("aa", 5));  //子类对象调用父类对方的返回值是:aa和5


        Response.Write("<p>" + mrr.suibian());  //888,4
    }
    void aa_RenCheng(string s, int e)    //我们给修改眼睛和手做一个事件
    {
        if (s == "yan")
        {
            if (e == 3)
            {
                Response.Write("我还不相信,那个有三只眼睛?");//我还不相信,那个有三只眼睛?
            }
        }
        if (s == "shou")
        {
            if (e == 2)
            {
                Response.Write("<p>一切都正常,有两只手");//一切都正常,有两只手


            }
        }
    }
}

 

//调试结果:

 

posted on 2009-07-12 12:54  依然疯  阅读(3615)  评论(0)    收藏  举报