c# override new
2011-06-02 15:13
134 查看
此文为转载,很清楚地代码,最后总结的很好,恩
using System;
using System.Collections.Generic;
using System.Text;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
baseClass bc;
class1 ct1 = new class1();
class2 ct2 = new class2();
ct1.prinf();
bc = ct1;
bc.prinf();
Console.WriteLine("---------------------");
ct2.prinf();
bc = ct2;
bc.prinf();
}
}
public class baseClass
{
private int index = 0;
public virtual void prinf()
{
Console.WriteLine("这是基类虚方法" + index.ToString());
}
}
public class class1 : baseClass
{
private int index = 1;
public override void prinf()
{
Console.WriteLine("这是子类新的方法" + index.ToString());
}
}
public class class2 : baseClass
{
private int index = 2;
public new void prinf()
{
Console.WriteLine("这是子类新的方法" + index.ToString());
}
}
}
运行结果:
这是子类新的方法1
这是子类新的方法1
---------------------
这是子类新的方法2
这是基类虚方法0
如上
使用override重写printf方法,通过父类引用一样只能看到重写后的方法;
如果使用new隐藏printf方法,父类子类引用各自对应方法;
override重写虚方法,那么就只剩下重写以后的方法;
new隐藏基类的方法,那么基类的方法和当前类的方法同时存在只是被隐藏了;
using System;
using System.Collections.Generic;
using System.Text;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
baseClass bc;
class1 ct1 = new class1();
class2 ct2 = new class2();
ct1.prinf();
bc = ct1;
bc.prinf();
Console.WriteLine("---------------------");
ct2.prinf();
bc = ct2;
bc.prinf();
}
}
public class baseClass
{
private int index = 0;
public virtual void prinf()
{
Console.WriteLine("这是基类虚方法" + index.ToString());
}
}
public class class1 : baseClass
{
private int index = 1;
public override void prinf()
{
Console.WriteLine("这是子类新的方法" + index.ToString());
}
}
public class class2 : baseClass
{
private int index = 2;
public new void prinf()
{
Console.WriteLine("这是子类新的方法" + index.ToString());
}
}
}
运行结果:
这是子类新的方法1
这是子类新的方法1
---------------------
这是子类新的方法2
这是基类虚方法0
如上
使用override重写printf方法,通过父类引用一样只能看到重写后的方法;
如果使用new隐藏printf方法,父类子类引用各自对应方法;
override重写虚方法,那么就只剩下重写以后的方法;
new隐藏基类的方法,那么基类的方法和当前类的方法同时存在只是被隐藏了;
相关文章推荐
- Versioning with the Override and New Keywords (C# Programming Guide)
- C#中的virtual,abstract,override和new关键字小结
- 【经典】C#中隐藏(new)、方法重写(override)、重载(overload)的区别
- C#中重写(override)、覆盖(new)、虚拟(Virtual)关键字的区别
- c#中new和override的区别
- C# new and override
- C# virtual override abstract new区别
- [黑马程序员]关于C#中的重载、override和new区别
- C# new virtual和override 区别
- C#区分abstract、virtual、override和new
- c#中new和override的区别
- 谈谈C#中的三个关键词new , virtual , override(装载 Winner.Net)
- C# 复习 new和override!
- C# 虚方法(virtual)覆盖(override) - 隐藏(new) - 重载
- c#的new、abstract、virtual、override,sealed关键字区别
- C#中子类对父类中虚方法的处理有重写(override)和覆盖(new),他们有什么区别?
- C#基础知识系列七(base、this、new、override、abstract、virtual、static)
- C#中override重写与new隐藏的区别,以及C#与Java的override区别
- C#中的new和override 比较
- C#中override与new的区别