zoukankan      html  css  js  c++  java
  • 【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  代码下载!  最后的效果如下@!!
  • 相关阅读:
    第60天Shader法线贴图、切线空间
    第59天Shader基本光照模型、漫反射光照算法、光照计算、高光、灰度图实现
    第58天shader混合命令、颜色运算、顶点/片元着色、属性类型、语义、坐标空间、Unity内置矩阵、纹理采样、Cg函数
    第57天shader基本结构、渲染队列、裁剪、深度写入
    第55天XLua实现背包
    第54天XLua插件使用(续)
    第53天XLua插件使用
    第52天-lua语言基础语法
    第51天-AssetBundle(AB包)
    第50天-背包实例(三)
  • 原文地址:https://www.cnblogs.com/barney/p/1134998.html
Copyright © 2011-2022 走看看