全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

详解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  # override重写方法  # new和override  # C# 重写ComboBox实现下拉任意组件的方法  # C#重写DataGridView  # 在C#的类或结构中重写ToString方法的用法简介  # C#通过重写Panel改变边框颜色与宽度的方法  # c#方法重写和隐藏的学习示例  # c#重写TabControl控件实现关闭按钮的方法  # C#中重载与重写区别分析  # C#运算符重载用法实例分析  # C#中重载相等(==)运算符示例  # C#中多态、重载、重写区别分析  # C#重载运算符详解  # 基于C#方法重载的总结详解  # c# 重载WndProc  # 实现重写“最小化”的实现方法  # C#中重载重写和覆盖的定义与区别  # 重写  # 子类  # 我是  # 抽象类  # 类中  # 综上  # 来了  # 都要  # 又有  # 而不  # 可以使用  # 有两种  # 报错  # 不叫  # 创建一个  # 大家多多  # 上图  # 结果是  # 什么区别  # Main 


相关文章: 如何在搬瓦工VPS快速搭建网站?  图片制作网站免费软件,有没有免费的网站或软件可以将图片批量转为A4大小的pdf?  保定网站制作方案定制,保定招聘的渠道有哪些?找工作的人一般都去哪里看招聘信息?  Swift中循环语句中的转移语句 break 和 continue  如何通过FTP空间快速搭建安全高效网站?  武汉外贸网站制作公司,现在武汉外贸前景怎么样啊?  如何通过可视化优化提升建站效果?  网站按钮制作软件,如何实现网页中按钮的自动点击?  建站之星如何通过成品分离优化网站效率?  中山网站推广排名,中山信息港登录入口?  c++23 std::expected怎么用 c++优雅处理函数错误返回【详解】  宝塔建站后网页无法访问如何解决?  学校免费自助建站系统:智能生成+拖拽设计+多端适配  c# Task.Yield 的作用是什么 它和Task.Delay(1)有区别吗  python的本地网站制作,如何创建本地站点?  Bpmn 2.0的XML文件怎么画流程图  在线制作视频的网站有哪些,电脑如何制作视频短片?  怎么用手机制作网站链接,dw怎么把手机适应页面变成网页?  如何在Windows 2008云服务器安全搭建网站?  建站之星导航如何优化提升用户体验?  江苏网站制作公司有哪些,江苏书法考级官方网站?  网站设计制作书签怎么做,怎样将网页添加到书签/主页书签/桌面?  如何在阿里云域名上完成建站全流程?  如何快速搭建虚拟主机网站?新手必看指南  如何优化Golang Web性能_Golang HTTP服务器性能提升方法  ,网站推广常用方法?  如何通过宝塔面板实现本地网站访问?  企业微网站怎么做,公司网站和公众号有什么区别?  北京网站制作网页,网站升级改版需要多久?  常州自助建站:操作简便模板丰富,企业个人快速搭建网站  如何选择CMS系统实现快速建站与SEO优化?  早安海报制作网站推荐大全,企业早安海报怎么每天更换?  制作网站建设的公司有哪些,网站建设比较好的公司都有哪些?  深圳网站制作平台,深圳市做网站好的公司有哪些?  建站主机如何安装配置?新手必看操作指南  网站建设制作、微信公众号,公明人民医院怎么在网上预约?  如何选择PHP开源工具快速搭建网站?  如何将凡科建站内容保存为本地文件?  定制建站是什么?如何实现个性化需求?  c# 在高并发场景下,委托和接口调用的性能对比  网站制作公司哪里好做,成都网站制作公司哪家做得比较好,更正规?  黑客如何通过漏洞一步步攻陷网站服务器?  测试制作网站有哪些,测试性取向的权威测试或者网站?  平台云上自主建站:模板化设计与智能工具打造高效网站  如何在IIS中新建站点并解决端口绑定冲突?  如何通过主机屋免费建站教程十分钟搭建网站?  深圳网站制作公司好吗,在深圳找工作哪个网站最好啊?  杭州银行网站设计制作流程,杭州银行怎么开通认证方式?  宝塔建站助手安装配置与建站模板使用全流程解析  如何选择适配移动端的WAP自助建站平台? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。