effective hierarchy(一)之 C#中的new

xiaoxiao2026-08-11  39

[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 modifierusing 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()。
转载请注明原文地址: https://www.6miu.com/read-5051028.html

最新回复(0)