• 【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  代码下载!  最后的效果如下@!!
  • 相关阅读:
    名字对战,看看你名字里蕴藏的力量
    趣味小游戏,测试你们做过的傻事
    贪吃蛇小游戏的初步尝试制作
    实现成绩表的初步想法
    结构体的一些小知识点
    慢慢完善-小游戏之推箱子
    よんにち
    さんか表单 框架 样式表和样式表选择器
    Two Day
    One day
  • 原文地址:https://www.cnblogs.com/barney/p/1134998.html
Copyright © 2020-2023  润新知