C#中New关键词的几种用法

前段时间一个朋友问到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
 2  
 3  {
 4  
 5      public int x;
 6   
 7      public void Invoke() {}
 8   
 9  }
10

在派生类中用 Invoke 名称声明成员会隐藏基类中的 Invoke 方法,即:

1 public class MyDerivedC : MyClass
2 {
3 
4    new public void Invoke() {}
5 
6 }

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

 1 using System;
 2 public class MyBaseC
 3 {
 4     public class MyClass
 5     {
 6         public int x = 200;
 7         public int y;
 8     }
 9 }
10 public class MyDerivedC : MyBaseC
11 {
12     new public class MyClass // nested type hiding the base type members    
13     {
14         public int x = 100;
15         public int y;
16         public int z;
17     }
18     public static void Main()
19     {
20         // Creating object from the overlapping class:    
21         MyClass S1 = new MyClass();
22         // Creating object from the hidden class:    
23         MyBaseC.MyClass S2 = new MyBaseC.MyClass();
24         Console.WriteLine(S1.x);
25         Console.WriteLine(S2.x);
26     }
27 }

 

 

 

 

转载于:https://my.oschina.net/weisenz/blog/200612

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值