【C#复习之虚方法】2008.4.2亲写

virtual 关键字用于修饰方法、属性、索引器或事件声明,并且允许在派生类中重写这些对象。例如,此方法可被任何继承它的类重写。
调用虚方法时,将为重写成员检查该对象的运行时类型。将调用大部分派生类中的该重写成员,如果没有派生类重写该成员,则它可能是原始成员。

默认情况下,方法是非虚拟的。不能重写非虚方法。

virtual 修饰符不能与 static、abstract 和 override 修饰符一起使用。

除了声明和调用语法不同外,虚拟属性的行为与抽象方法一样。

  • 在静态属性上使用 virtual 修饰符是错误的。

  • 通过包括使用 override 修饰符的属性声明,可在派生类中重写虚拟继承属性



    using System;
    using System.Collections.Generic;
    using System.Text;

    namespace virtul
    {
        class Sias
        {
            static void Main(string[] args)
            {
                //string Sname="barney";
                //int SNum = 20051054172;
                //student s = new student(Sname, SNum);
                //moiniter m=new moiniter(
                student[] Stuarray=new student[5];
                Stuarray[0] = new student("barney", 72);
                Stuarray[1] = new moiniter("barneyyuan", 72);
                Stuarray[2] = new vicemonitor("yuanzheng", 72);
                Stuarray[3] = new Designer("yuan", 72);
                Stuarray[4] = new Designer("zheng", 72);
             
                foreach(student s in Stuarray)
                {
                    s.learn();
                }


            }
        }
        class student
        {
           protected string Name;
            protected int StuNum;
            public student( )
            {
     
            }
            public student(string Name, int StuNum)
            {
                this.Name = Name;
                this.StuNum=StuNum;

            }
            public virtual void learn()
            {
                Console.WriteLine("学生:"+Name+"开始学习");
            }
           
     
        }

        class moiniter:student
        {
            /// <summary>
            /// base 调用父类的构造函数
            /// </summary>
            /// <param name="Name"></param>
            /// <param name="StuNum"></param>
            public moiniter(string Name, int StuNum) : base(Name, StuNum) { }
           
          
            public override void learn()
            {
                base.learn();//调用基类的构造函数;
                Console.WriteLine("组长开始发任务");
            }


        }
        class vicemonitor: student
        {

            public vicemonitor(string Name, int StuNum) : base(Name, StuNum) { }


            public override void learn()
            {
                base.learn();
                Console.WriteLine("副组长开始工作");
            }


        }
       
        class Designer: student
        {

            public Designer(string Name, int StuNum) : base(Name, StuNum) { }


            public override void learn()
            {
                base.learn();
                Console.WriteLine("强人工作室设计人员开始工作");
            }


        }
    }

/Files/barney/virtul.rar  代码下载!  最后的效果如下@!!
posted @ 2008-04-02 18:25  barney  阅读(194)  评论(0编辑  收藏  举报