读你必须知道的.NET(五)

一般来说,new关键字可作为运算符,用于创建对象和调用构造函数,可作为修饰符,用于向基类成员隐藏继承成员。作为修饰符,new实现派生类中隐藏方法,则基类方法必须定义为virtual,new作为修饰符,实现隐藏基类成员时,不可与override共存,new用于实现创建一个新成员,同时隐藏基类的同名成员,而override用于实现对基类成员的扩展。如果在子类中隐藏了基类的数据成员,那么对基类原数据成员的访问,可以通过base来完成。new可做为约束,用于在泛型声明中约束可能用作类型参数的参数的类型。

注意:new作为约束和其他约束共存时,必须在最后指定。

定义:

class Genericer<T> where T : new()
{
    public T GetItem()
    {
        return new T();
    }
}

new可以用在多态中,http://www.cnblogs.com/allenlooplee/archive/2006/03/13/348760.html

new一个class时,new完成了以下两个方面的内容:一是调用newobj命令来为实例在托管堆中分配内存;二是调用构造函数来实现对象初始化。   

new一个struct时,new运算符用于调用其带构造函数,完成实例的初始化。   

new一个int时,new运算符用于初始化其值为0。   

另外必须清楚,值类型和引用类型在分配内存时是不同的,值类型分配于线程的堆栈(stack)上,并变量本身就保存其实值,因此也不受GC的控制,而引用类型变量,包含了指向托管堆的引用,内存分配于托管堆(managed heap)上,内存收集由GC完成。 

new运算符不可重载。   

new分配内存失败,将引发OutOfMemoryException异常。

对于基本类型来说,使用new操作符来进行初始化的好处是,某些构造函数可以完成更优越的初始化操作,而避免了不高明的选择。

http://www.cnblogs.com/anytao/archive/2007/04/28/must_net_05.html

posted @ 2013-02-28 17:34  Ribbon  阅读(200)  评论(0编辑  收藏  举报