旗下导航:搜·么
当前位置:网站首页 > .Net教程 > 正文

详解C#用new和override来完成抽象类的重写区分【C#.Net教程】,C#,new,override

作者:搜教程发布时间:2019-11-27分类:.Net教程浏览:69评论:0


导读:本篇文章重要引见了详解C#用new和override来完成笼统类的重写区分,小编以为挺不错的,如今分享给人人,也给人人做个参考。一同追随小编过来看看吧。一,笼统的完成...
本篇文章重要引见了详解C#用new和override来完成笼统类的重写区分,小编以为挺不错的,如今分享给人人,也给人人做个参考。一同追随小编过来看看吧。

一,笼统的完成

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

namespace Virtualdemo
{
  class Program
  {
    static void Main(string[] args)
    {//BClass A = new BClass(); 笼统类没法被实例
      Class1 c = new Class1();
      BClass c2 = c;
      c2.MethodA();
      c.MethodA();
      c2.MethodB();
      c.MethodB();
      c2.MethodC();
      c.MethodC();
      Console.ReadKey();
    }
  }
  abstract class BClass  //笼统类没法被实例
  {
    public virtual void MethodA() { Console.WriteLine("BClassA"); }
    public virtual void MethodB() { Console.WriteLine("BClassB"); }
    public virtual void MethodC() { Console.WriteLine("BClassC"); }
  }
  class Class1 : BClass
  {
    public void MethodA() { Console.WriteLine("MethodA"); }//假如一个虚函数 在子类中没有经由过程override关键字,那末这个要领就没有被重写,而是被隐蔽了
    public override void MethodB() { Console.WriteLine("MethodB"); }
    public override void MethodC() { base.MethodC(); }
  }
}

从上图得出的效果是:

综上:笼统类的虚要领需要被重写,那题目来了重写有两种体式格局,new和override又有什么区分

二,new和override重写的区分:

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

namespace Virtualdemo
{
  class Program
  {
    static void Main(string[] args)
    {
      Teacher t = new Teacher();
      Student stu = t;
      stu.Exam();
      stu.Say();
      t.Say();
      Console.ReadKey();
    }
  }
  public abstract class Student
  {
    public virtual void Exam()
    {
      Console.WriteLine("门生都要测验");
    }
    public void Say()
    {
      Console.WriteLine("我是门生");
    }
  }
  public class Teacher : Student
  {
    public override void Exam()
    {
      Console.WriteLine("先生不必测验");
    }
    //public override void Say() //报错,提醒没有virtual,没法被重写
    //{
    //  Console.WriteLine("我是先生");
    //}
    public new void Say()
    {
      Console.WriteLine("我是先生");
    }
  }
}

效果显现为:

综上总结:

1、假如基类没有定义虚要领,那子类只能运用new,而不能运用override

2、基类有无定义虚要领,子类都可以运用new

3、子类运用new并不叫重写,而是子类新创建一个要领,只是新创建的这个要领恰好跟基类中的要领同名

以上就是详解C#用new和override来完成笼统类的重写区分的内容,更多相关内容请关注ki4网(www.ki4.cn)!

标签:C#newoverride


欢迎 发表评论: