C# 虚方法(virtual)覆盖(override) - 隐藏(new) - 重载
来源:互联网 发布:淘宝买家秀情趣福利 编辑:程序博客网 时间:2024/06/10 23:39
using System;
using System.Collections.Generic;
using System.Text;
using System.Threading;
namespace AppTest
{
class Demo_virtual
{
static void Main(string[] args)
{
////普通,这里的 virtual 作用就跟重写一样了
//Student student = new Student();
//Teacher teacher = new Teacher();
//student.SetHeight(170, 20);
//teacher.SetHeight(170, 20);
//Console.WriteLine("Student's height is: {0}, age is {1}", student.Getheight(), student.Getage());
//Console.WriteLine("Teacher's height is: {0}, age is {1}", teacher.Getheight(), teacher.Getage());
//体现 virtual 方法,多态
People people;
//age只是隐藏,所以这里两个输出都是一样
people = new Student();
people.SetHeight(170, 20);
Console.WriteLine("people1's height is: {0}, age is {1}", people.Getheight(), people.Getage());
people = new Teacher();
people.SetHeight(170, 20);
Console.WriteLine("people2's height is: {0}, age is {1}", people.Getheight(), people.Getage());
Thread.Sleep(3 * 1000);//暂停3秒看结果
}
}
class People
{
public int height;
public int age;
public void SetHeight(int h, int a)
{
height = h;
age = a;
}
//virtual方法
public virtual int Getheight()
{
return height;
}
//一般方法
public int Getage()
{
return age;
}
}
//学生
class Student:People
{
/*覆盖(override):只能使用"override"关键字来覆盖(override)父类中标记为
* "virtual"、"abstract"或"override"的方法;
* 而子类中标记为override的方法,
* 也必须是父类中标记为"virtual"、"abstract"或"override"的方法。
*/
public override int Getheight()
{
return height + 5;
}
/*隐藏(hide):在子类中创建与父类中的方法具有相同签名
*(相同的方法名,相同的参数列表-参数类型和次序)
* 的方法(可以带有"virtual"或"override"关键字)即可实现,
* 但建议使用"new"关键字,以明确地隐藏。
*/
public new int Getage()
{
return age + 5;
}
/*重载(overload):不需要任何特殊的关键字
* 相同的方法名,返回值可以同可以不同
* 参数类型或次序必须有不完全相同,即至少有一项不同
*/
public int Getage(int addAge)
{
return age + addAge;
}
}
//老师
class Teacher : People
{
}
}
/*重载,覆盖,隐藏之间的区别
*
重载(overload)用于同一类中的成员函数,其特征为:
* 1)在同一类中
* 2)相同的函数名
* 3)参数不同(包括参数类型不同,或参数个数不同,或两者都不同,注意:和返回值没关系)
* 4)和是否虚函数无关
覆盖(override)是指派生类函数覆盖基类函数,其特征为:
* 1)不同的范围(分别位于派生类与基类)
* 2)相同的函数名称
* 3)参数相同
* 4)基类函数必须是虚函数
隐藏(hide)是指派生类的函数屏蔽了与其同名的基类函数,其特征为:
* 1)不同的范围(分别位于派生类与基类)
* 2)相同的函数名
(3)若参数不同,基类函数无virtual关键字,基类函数将会被重载;
()若参数相同,基类函数无virtual关键字。基类函数将会被隐藏。(因为基类函数不是虚函数,所以是隐藏而不是覆盖)。
()若参数相同,基类函数有virtual关键字。如果基类函数有多个重载版本,且派生类并没有重写所有的同名虚函数,当在派生类中调用函数时,基类中未被重写的虚函数将被隐藏。(当然,被重写的函数就是覆盖了)。
* 注意: 如果想在派生类中调用基类中的被隐藏的函数,可以在派生类中填写如下代码:using Base::Fun2
- C# 虚方法(virtual)覆盖(override) - 隐藏(new) - 重载
- virtual,overload,,override,new (虚方法,重载,覆盖,隐藏)以及A a=new B()详解
- C#方法重载(overload)、重写(覆盖)(override)、隐藏(new)
- C#方法重载(overload)、重写(覆盖)(override)、隐藏(new) -第四天
- C#方法的重载(overload)、重写(override)、隐藏(new)
- C#方法重载(overload)方法重写(override)隐藏(new)
- C#方法重载(overload)方法重写(override)隐藏(new)
- C#方法重载(overload)方法重写(override)隐藏(new)
- 【转】C#中隐藏(new)和方法重写(override)和重载(overload)
- C#中隐藏(new)和方法重写(override)和重载(overload)的区别
- C# virtual,override,new学习
- C# new virtual override 区别
- C# virtual、Override、New小结
- C# virtual,override,new 实例
- c# 继承 virtual override new
- C#中的一些方法修饰关键字virtual override sealed new
- 【KK学习笔记】c# 虚方法 virtual 、 重写方法 override 、new 的使用与理解
- 关于隐藏(hide), 重载(overload), 覆盖(override)
- [分享]五个有用的jQuery技巧
- 黑马程序员——话说万丈高楼平地起,C#基础巩固笔记
- 从 2.4 到 2.6:Linux 内核可装载模块机制的改变对设备驱动的影响
- 深入Hibernate映射文件(一)
- 怎样使用数据库呢1234
- C# 虚方法(virtual)覆盖(override) - 隐藏(new) - 重载
- Adapter - 适配器模式
- TFTP协议详解
- 关于如何提高自己的写程序的思维!
- eclipse基本命令
- Java回调函数的理解
- 锁定表格栏位范例网页(html)
- 路由器IOS升级应该注意七点细节
- Ajax的问题