C#中NEW和OVERRIDER

来源:百度知道 编辑:UC知道 时间:2024/05/30 00:07:46
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication9
{
public enum genders//定义性别枚举
{
female = 0,
male
}
public class person//人类
{
public person()//重写构造函数
{
this._name = "默认姓名";
this._age = 20;
this._gender = genders.male;
}
protected string _name;
protected int _age;
protected genders _gender;
public virtual void introducemyself()//虚函数,介绍自己的方法
{
System.Console.WriteLine("person.introducemyself()");
}
}
public class chineseperson : person//中国人继承了人类
{
public chineseperson()//中国人类
: base()//访问父类构造函数
{
this._name = "默认中文名";

我觉得只要没有写virtaul ,就默认是new。但C#希望你能明确地写一个new出来,表明你的意图。因此,它给你一个warining, 而不是一个error.

有一个原则:有override时,函数的执行看“对象创建”的真实类型。没有override时,或是用new时,函数的执行看“指针声明”的类型。

不换成new是:
chinese.introducemyself()
chinese.introducemyself()
换后
person.introducemyself()
chinese.introducemyself()

可以试试,我试过了。

不会改变,这个需要你对面向对象知识的了解:

在派生类中使用New来“隐藏”基类方法和使用virtual来表示基类方法可以被覆盖时两种完全不同的概念。覆盖的目的是提供一个方法的不同实现,是一个方法,方法的不同版本是相互连接的,因为他们意图执行相同的任务。然而,隐藏方法的目的是将一个方法替换为另一个方法,通常是不关联的,而且执行完全不同的任务。所以结果不会改变,但性质变了。

谢谢你的这个问题,我是翻书的!相信我,上面这段话是我从书摘的,平时看书有老不想看!

什么东西 呀