首页 > 编程语言 >C# override详解

C# override详解

时间:2023-03-28 13:45:30浏览次数:29  
标签:Console Parent C# 详解 override new 父类 方法

https://blog.csdn.net/u011555996/article/details/106751111

重载、重写、覆写,分别指的是overload、override、new。

一、override重写,是在子类中重写父类中的方法,两个函数的函数特征(函数名、参数类型与个数)相同。用于扩展或修改继承的方法、属性、索引器或事件的抽象或虚拟实现。提供从基类继承的成员的新实现,而通过override声明重写的方法称为基方法。
注意事项:
1.重写基方法必须具有与override方法相同的签名。
2.override声明不能更改virtual方法的可访问性,且override方法与virtual方法必须具有相同级别访问修饰符。
3.不能用new、static、virtual修饰符修改override方法。
4.重写属性声明必须指定与继承的属性完全相同的访问修饰符、类型和名称。
5.重写的属性必须是virtual、abstract或override。
6.不能重写非虚方法或静态方法。
7.父类中有abstract,那么子类同名方法必定有override,若父类中有 virtual方法,子类同名方法不一定是override,可能是overload。
8.override必定有父子类关系。

二、overload重载,在同一个类中方法名相同、参数或返回值不同的多个方法即为方法重载。
注意事项:
1.出现在同一个类中。
2.参数列表不同或返回类型和参数列表都不同,只有返回类型不同不能重载。(参数列表包括参数个数和参数类型)

三、overwrite覆写,用new实现。在子类中用 new 关键字修饰定义的与父类中同名的方法,也称为覆盖,覆盖不会改变父类方法的功能。

示例:

class Parent
{
public void F()
{
Console.WriteLine("Parent.F()");
}
public virtual void G() //抽象方法
{
Console.WriteLine("Parent.G()");
}
public int Add(int x, int y)
{
return x + y;
}
public float Add(float x, float y) //重载(overload)Add函数
{
return x + y;
}
}
class ChildOne:Parent //子类一继承父类
{
new public void F() //覆写(overwrite)父类函数
{
Console.WriteLine("ChildOne.F()");
}
public override void G() //重写(override)父类虚函数,主要实现多态
{
Console.WriteLine("ChildOne.G()");
}
}
class ChildTwo:Parent //子类二继承父类
{
new public void F()
{
Console.WriteLine("ChildTwo.F()");
}
public override void G()
{
Console.WriteLine("ChildTwo.G()");
}
}
class Program
{
static void Main(string[] args)
{
Parent childOne = new ChildOne();
Parent childTwo = new ChildTwo();
//调用Parent.F()
childOne.F();
childTwo.F();
//实现多态
childOne.G();
childTwo.G();
Parent load = new Parent();
//重载(overload)
Console.WriteLine(load.Add(1, 2));
Console.WriteLine(load.Add(3.4f, 4.5f));
Console.Read();
}
}
————————————————
版权声明:本文为CSDN博主「luckyone906」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/u011555996/article/details/106751111

标签:Console,Parent,C#,详解,override,new,父类,方法
From: https://www.cnblogs.com/Dongmy/p/17264846.html

相关文章

  • linq2db“Configuration string is not provided”
    linq2db升级到5.1.1后,出现异常:LinqToDB.LinqToDBException:"Invalidconfiguration,Configurationstringisnotprovided."解决:1,在app.config中添加:<connectio......
  • ubuntu vnc xstartup 解決vnc不能顥示icon
    1.0 xstartup#!/bin/sh#Uncommentthefollowingtwolinesfornormaldesktop:#unsetSESSION_MANAGER#exec/etc/X11/xinit/xinitrc[-x/etc/vnc/xstartup......
  • Exadata X6-2,出现RS-7445 [Serv CELLSRV hang detected] [It will be restarted]
    1、驻场的同事发现X6-2的某个存储节点,出现7445错误。#cellcli-elistalerthistory2023-03-27T23:01:44+08:00critical"RS-7445[ServCELLSRVhangdetected][Itw......
  • vue全家桶进阶之路19:webpack资源打包工具
    Vue.js是一个前端开发框架,它可以帮助我们快速构建单页应用和复杂的交互界面。而Webpack则是一个前端资源打包工具,它可以将多个JavaScript、CSS、HTML、图片等资源打包......
  • JSON的基本使用(详解)
    一、什么是JSONJSON(JavaScriptObjectNotation)是一种轻量级的数据交换格式。易于人阅读和编写。同时也易于机器解析和生成。它基于Ja......
  • 伪元素和CSS类
    伪元素可以结合CSS类: p.article:first-letter{color:#ff0000;}<pclass="article">文章段落</p>https://www.lekaowang.com/cjhjs/zx/ksdg/上面的例子会使所有class......
  • CSS - :before 伪元素
     ":before"伪元素可以在元素的内容前面插入新内容。下面的例子在每个<h1>元素前面插入一幅图片:实例h1:before{content:url(smiley.gif);}https://www.lekao......
  • C++开发方向书籍推荐
    如果你正在学习C++,那么一本好的教材或参考书可以事半功倍。以下是几本我个人推荐的C++书籍或视频:C++基础看书C++PrimerC++程序设计语言EffectiveC++MoreEffectiv......
  • ascii-gb-unicode-utf-8
    中国人民通过对ASCII编码的中文扩充改造,产生了GB2312编码,可以表示6000多个常用汉字。汉字实在是太多了,包括繁体和各种字符,于是产生了GBK编码,它包括了GB2312中的编......
  • echarts点击事件,点击的是节点还是文字?
    通过params.event.target.culling的true和false判断,true:点击了节点,false:点击了文字myChart.on(‘click’,function(params){if(params.event.target.culling===tr......