当前位置:编程学习 > C#/ASP.NET >>

C#中new的几种用法

(1)new 运算符 用于创建对象和调用构造函数。 
(2)new 修饰符 用于隐藏基类成员的继承成员。 
(3)new 约束 用于在泛型声明中约束可能用作类型参数的参数的类型。 
new 运算符 
1.用于创建对象和调用构造函数 
例:Class_Test MyClass = new Class_Test(); 
2.也用于为值类型调用默认的构造函数 
例:int myInt = new int(); 
myInt 初始化为 0,它是 int 类型的默认值。该语句的效果等同于:int myInt = 0; 
3.不能重载 new 运算符。 
4.如果 new 运算符分配内存失败,则它将引发 OutOfMemoryException 异常。 
new 修饰符 
使用 new 修饰符显式隐藏从基类继承的成员。若要隐藏继承的成员,请使用相同名称在派生类中声明该成员,并用 new 修饰符修饰它。 
请看下面的类: 
以下是引用片段: 
1 public class MyClass 

3 { 

5 public int x; 

7 public void Invoke() {} 

9 } 
10 
在派生类中用 Invoke 名称声明成员会隐藏基类中的 Invoke 方法,即: 
以下是引用片段: 
1 public class MyDerivedC : MyClass 

3 { 

5 new public void Invoke() {} 

7 } 

但是,因为字段 x 不是通过类似名隐藏的,所以不会影响该字段。 
通过继承隐藏名称采用下列形式之一: 
1.引入类或结构中的常数、指定、属性或类型隐藏具有相同名称的所有基类成员。 
2.引入类或结构中的方法隐藏基类中具有相同名称的属性、字段和类型。同时也隐藏具有相同签名的所有基类方法。 
3.引入类或结构中的索引器将隐藏具有相同名称的所有基类索引器。 
4.在同一成员上同时使用 new 和 override 是错误的。 
注意:在不隐藏继承成员的声明中使用 new 修饰符将生成警告。 
示例 
在该例中,嵌套类 MyClass 隐藏了基类中具有相同名称的类。该例不仅说明了如何使用完全限定名访问隐藏类成员,同时也说明了如何使用 new 修饰符消除警告消息。 
以下是引用片段: 
1 using System; 

3 public class MyBaseC 

5 { 

7 public class MyClass 

9 { 
10 
11 public int x = 200; 
12 
13 public int y; 
14 
15 } 
16 
17 } 
18 
19 
20 
21 public class MyDerivedC : MyBaseC 
22 
23 { 
24 
25 new public class MyClass // nested type hiding the base type members 
26 
27 { 
28 
29 public int x = 100; 
30 
31 public int y; 
32 
33 public int z; 
34 
35 } 
36 
37 
38 
39 public static void Main() 
40 
41 { 
42 
43 // Creating object from the overlapping class: 
44 
45 MyClass S1 = new MyClass(); 
46 
47 
48 
49 // Creating object from the hidden class: 
50 
51 MyBaseC.MyClass S2 = new MyBaseC.MyClass(); 
52 
53 
54 
55 Console.WriteLine(S1.x); 
56 
57 Console.WriteLine(S2.x); 
58 
59 } 
60 
61 } 
62 
输出 
100 
200  --------------------编程问答-------------------- LZ想表达什么? --------------------编程问答-------------------- 普及知识吗?
--------------------编程问答-------------------- 谢谢楼主分享知识! --------------------编程问答-------------------- --------------------编程问答-------------------- 楼主分享知识 --------------------编程问答-------------------- 值得学习 --------------------编程问答-------------------- --------------------编程问答-------------------- 谢谢,值得学习 --------------------编程问答-------------------- 学习啦。感谢分享。 --------------------编程问答-------------------- 很好啊,学习 --------------------编程问答-------------------- --------------------编程问答-------------------- 谢谢楼主分享知识! --------------------编程问答-------------------- 要说明的问题是??LZ --------------------编程问答-------------------- 感谢分享 --------------------编程问答-------------------- --------------------编程问答-------------------- 感谢分享 --------------------编程问答-------------------- --------------------编程问答-------------------- --------------------编程问答-------------------- 在linq中是不是也有含义 --------------------编程问答-------------------- 学习了,。net知识 博大精深啊 --------------------编程问答-------------------- --------------------编程问答-------------------- 谢谢楼主分析自己的知识 --------------------编程问答--------------------   多谢分享啦 --------------------编程问答-------------------- --------------------编程问答-------------------- 谢谢,值得学习 --------------------编程问答-------------------- --------------------编程问答--------------------
引用 1 楼  的回复:
LZ想表达什么?
小总结下,你从标题中没看出来? --------------------编程问答-------------------- 谢谢楼主分享知识!

加强基础  --------------------编程问答-------------------- 学习了啊谢谢楼主
补充:.NET技术 ,  C#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,