using System;
using System.Collections.Generic;
using System.Text;namespace ConsoleApplicationTestNewOverride
{
class Program
{
static void Main(string[] args)
{
Food f = new Food();
f.OutputName();
f.OutputSubClass(); Apple a = new Apple();
a.OutputName();
a.OutputSubClass(); Console.ReadKey(true);
}
} public class Food
{
public virtual void OutputName()
{
Console.WriteLine("The name is Food.");
} public void OutputSubClass()
{
Console.WriteLine("I have no subclass.");
}
} public class Apple : Food
{
public override void OutputName()
{
Console.WriteLine("The name is Apple.");
} public new void OutputSubClass()
{
Console.WriteLine("My supterclass is Food and I don't have a subclass.");
}
}
}输出结果为:
The name is Food.
I have no subclass.
The name is Apple.
My supterclass is Food and I don't have a subclass.
从输出结果来看,用new方法对基类方法稳藏与基类采用virtual方法没有什么不同啊!它们各自的用途是什么?
using System.Collections.Generic;
using System.Text;namespace ConsoleApplicationTestNewOverride
{
class Program
{
static void Main(string[] args)
{
Food f = new Food();
f.OutputName();
f.OutputSubClass(); Apple a = new Apple();
a.OutputName();
a.OutputSubClass(); Console.ReadKey(true);
}
} public class Food
{
public virtual void OutputName()
{
Console.WriteLine("The name is Food.");
} public void OutputSubClass()
{
Console.WriteLine("I have no subclass.");
}
} public class Apple : Food
{
public override void OutputName()
{
Console.WriteLine("The name is Apple.");
} public new void OutputSubClass()
{
Console.WriteLine("My supterclass is Food and I don't have a subclass.");
}
}
}输出结果为:
The name is Food.
I have no subclass.
The name is Apple.
My supterclass is Food and I don't have a subclass.
从输出结果来看,用new方法对基类方法稳藏与基类采用virtual方法没有什么不同啊!它们各自的用途是什么?
解决方案 »
- 序号设置 再次求助
- C#,keydown事件中,如何取得e.key的ASCII码?
- 如何隐藏listview的滚动条
- 结构体中嵌套自己
- 在设计web页面时如何知道控件的坐标
- 哪里可以下载OA项目
- 第一次来csdn,处女贴~~~怎么把我机器的文件复制到局域网内的其他机器啊?(知道用户名密码)急~~~搞定马上结贴
- 请教思归、junqiang等大侠:如何保护dll不被其他未授权用户调用和替换(C#)
- [急!100分]如何用C#写绘图代码,请高手帮帮忙啊
- 请问哪里有C#编译器下载?
- BackgroundWorker_RunWorkerCompleted在引发异常时,强制运行完成[帮顶给分]]
- 请问C#能做OPENGL的东西么?C#能搭建云计算平台么?
隐藏(new):基类方法不做声明(默认为非虚方法),在派生类中使用new声明此方法的隐藏
重写访问父类子类都调用子类的重写方法,隐藏时,访问父类则调用父类的方法,子类调用子类的方法
using System;
using System.Collections.Generic;
using System.Text;namespace ConsoleApplicationTestNewOverride
{
class Program
{
static void Main(string[] args)
{
Food f = new Food();
f.OutputName();
f.OutputSubClass(); Apple a = new Apple();
a.OutputName();
a.OutputSubClass(); Food g = new Apple();
g.OutputName();
g.OutputSubClass(); Console.ReadKey(true);
}
} public class Food
{
public virtual void OutputName()
{
Console.WriteLine("The name is Food.");
} public void OutputSubClass()
{
Console.WriteLine("I have no subclass.");
}
} public class Apple : Food
{
public override void OutputName()
{
Console.WriteLine("The name is Apple.");
} public new void OutputSubClass()
{
Console.WriteLine("My supterclass is Food and I don't have a subclass.");
}
}
}输出:
The name is Food.
I have no subclass.
The name is Apple.
My supterclass is Food and I don't have a subclass.
The name is Apple.
I have no subclass.
可不可以这么解释:用虚函数的方法是在子类中彻底消灭父类中的同名函数,而隐藏(new)实际上是在子类中又创造了一个新的函数,父类中的这个同名函数只不过是被隐藏起来了,当类的实体是子类时,就用子类的,当实体是父类时,就用父类的!这样理解对吧?