effective hierarchy(一)之 C#中的new

[b]MSDN(c#2.0):[/b]
在msdn中,指出new的三种用法。即,作为操作符(operator)、修改符(modifier)、约束(constraint)使用。

[b]一、new操作符用于创建[/b]
(1)在堆迭(heap,可以想象为一面墙倒塌后砖头间的堆叠状;而stack则是线性描述)上,使用newobj命令创建对象并显式调用构建(constructor)。
如,myclass mytest= new myclass();
(2)对于值类型(value type),new使用initobj命令,隐式调用构建,用来初始化值。
   如,int myint = new int();//相当于int myint = 0;

注意事项:
(a)不能为结构(struct)声明默认的构建
(b)值类型对象创建于栈,如结构;引用类型对象创建于堆(heap)
(c)new不能被过载(overloaded)
(d)new操作符不能定位内存时,会抛出异常OutOfMemoryException

[b]二、new修改符用于派生类中的基类隐藏[/b]
(1)new用于派生类中,强制隐藏继承来的(inherited)基类成员(当然是同名的)。
(2)new用于隐藏继承时,遵守以下规则:
a/对于类或结构的常量、字段、属性以及第一次引用的类型(type)-隐藏基类成员;
b/对于类或结构第一次引用的函数-用来隐藏属性、字段和类型;对于相同签名的函数,则隐藏整个函数;
c/对于类或结构第一次引用的索引器-相同的签名(same signature)隐藏基类整个索引器;
d/对于嵌套类-在继承时,new隐藏基类的成员。

注意事项:
(1)对于继承关系的同名成员,如基类的虚拟方法机制,不允许同时使用关键字new和override,两者效果等效;
(2)对于继承关系的同名成员,在声明时,如果不显式使用new来隐藏继承的成员,会产生编译器警告;

主要用途示例:
// cs_modifier_new.cs
// The new modifier
using System;
public class MyBaseC
{
public static int x = 55;
public static int y = 22;
}

public class MyDerivedC : MyBaseC
{
new public static int x = 100; // Name hiding
public static void Main()
{
// Display the overlapping value of x:
Console.WriteLine(x);

// Access the hidden value of x:
Console.WriteLine(MyBaseC.x);

// Display the unhidden member y:
Console.WriteLine(y);
}
}
///output:
///100
///55
///22


[b]三、约束[/b]
(1)对泛型参数的类型多态性进行限制,类型参数(type argument)必须使用公共(public)无参(parameterless)的构建方法(即公共的、默认构造函数)来建立。见示例1。<注,这点似乎比较低极,为什么不能带参呢?请大家讨论。>
(2)new约束与其它形式的约束一起时,new约束须在最后出现。见示例2。

示例1:
class ItemFactory<T> where T : new()
{
public T GetNewItem()
{
return new T();
}
}


示例2:
using System;
public class ItemFactory<T>
where T : IComparable, new()
{
}


蕴含:new,即新,意味着该关键字有优秀的添加、删除能力:
(1)处在创建过程
(2)没有被使用或拥有
(3)替代原物,原物不存在,或原物不再有用.

致用:
~要“新”一个物件时,使用new好了。
~一般用对象的无参构建来创建,如class_anyThing myclass = new class_anyThing();有参数时,在圆括号中放参数吧。
~形成(泛型)约束时,忽略掉类型,简写声明为new()。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值