首页 / 软件开发 / .NET编程技术 / [你必须知道的.NET] 第五回:深入浅出关键字---把new说透
[你必须知道的.NET] 第五回:深入浅出关键字---把new说透2011-03-14 博客园 Anytao相关文章:本文将介绍以下内容:面向对象基本概念new关键字深入浅出对象创建的内存管理1.引言园子里好像没有或者很少把new关键字拿出来说的,那我就占个先机吧,呵呵。那么,我们到底有必要将一个关键字拿出来长篇大论吗?看来是个问题。回答的关键是:你真的理解了new吗?如果是,那请不要浪费时间,如果不是,那请继续本文的循序之旅。下面几个 问题可以大概的考察你对new的掌握,开篇之前,希望大家做个检验,如果通过了,直接关掉本页即可。如果没有通过,希望本文的阐述能帮你找出答案。new一个class对象和new一个struct或者enum有什么不同?new在.NET中有几个用途,除了创建对象实例,还能做什么?new运算符,可以重载吗?范型中,new有什么作用?new一个继承下来的方法和override一个继承方法有何区别?int i和int i = new int()有什么不同?2.基本概念一般说来,new关键字在.NET中用于以下几个场合,这是MSDN的典型解释:作为运算符, 用于创建对象和调用构造函数。本文的重点内容,本文在下一节来重点考虑。作为修饰符,用于向基类成员隐藏继承成员。作为修饰符,基本的规则可以总结为:实现派生类中隐藏方法,则基类方法必须定义为virtual;new作为修饰符,实现隐藏基类成员时,不可和override共存,原因是这两者语义相斥:new用于实现创建一个新成员,同时隐藏基类的同名成员;而override用于实现对基类成员的扩展。另外,如果在子类中隐藏了基类的数据成员,那么对基类原数据成员的访问,可以通过base修饰符来完成。例如:new作为修饰符using System;
namespace Anytao.net.My_Must_net
{
class Number
{
public static int i = 123;
public void ShowInfo()
{
Console.WriteLine("base class---");
}
public virtual void ShowNumber()
{
Console.WriteLine(i.ToString());
}
}
class IntNumber : Number
{
new public static int i = 456;
public new virtual void ShowInfo()
{
Console.WriteLine("Derived class---");
}
public override void ShowNumber()
{
Console.WriteLine("Base number is {0}", Number.i.ToString());
Console.WriteLine("New number is {0}", i.ToString());
}
}
class Tester
{
public static void Main(string[] args)
{
Number num = new Number();
num.ShowNumber();
IntNumber intNum = new IntNumber();
intNum.ShowNumber();
Number number = new IntNumber();
//究竟调用了谁?
number.ShowInfo();
//究竟调用了谁?
number.ShowNumber();
}
}
}