快速业务通道

New关键词的几种用法

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-04-12

前段时间一个朋友问到C#的New关键字有几种用法,虽说在日常编程中经常用到这个小家伙,但它到底有几种用法还真没有留意过,现将从网上总结出的资料记下以供同仁学习。
  (1)new 运算符 用于创建对象和调用构造函数。

  (2)new 修饰符 用于隐藏基类成员的继承成员。

  (3)new 约束 用于在泛型声明中约束可能用作类型参数的参数的类型。

  new 运算符

  .用于创建对象和调用构造函数

  例:Class_Test MyClass = new Class_Test();

  .也用于为值类型调用默认的构造函数

  例:int myInt = new int();

  myInt 初始化为 ,它是 int 类型的默认值。该语句的效果等同于:int myInt = ;

  .不能重载 new 运算符。

  .如果 new 运算符分配内存失败,则它将引发 OutOfMemoryException 异常。

  new 修饰符

  使用 new 修饰符显式隐藏从基类继承的成员。若要隐藏继承的成员,请使用相同名称在派生类中声明该成员,并用 new 修饰符修饰它。

  请看下面的类:

以下是引用片段:
   public class MyClass
  
   {
  
   public int x;
  
   public void Invoke() {}
  
   }
  


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

以下是引用片段:
   public class MyDerivedC : MyClass
  
   {
  
   new public void Invoke() {}
  
   }
  

[NextPage]
  但是,因为字段 x 不是通过类似名隐藏的,所以不会影响该字段。

  通过继承隐藏名称采用下列形式之一:

  .引入类或结构中的常数、指定、属性或类型隐藏具有相同名称的所有基类成员。

  .引入类或结构中的方法隐藏基类中具有相同名称的属性、字段和类型。同时也隐藏具有相同签名的所有基类方法。

  .引入类或结构中的索引器将隐藏具有相同名称的所有基类索引器。
  
  .在同一成员上同时使用 new 和 override 是错误的。
  注意:在不隐藏继承成员的声明中使用 new 修饰符将生成警告。

  示例

  在该例中,嵌套类 MyClass 隐藏了基类中具有相同名称的类。该例不仅说明了如何使用完全限定名访问隐藏类成员,同时也说明了如何使用 new 修饰符消除警告消息。

以下是引用片段:
   using System;
  
   public class MyBaseC
  
   {
  
   public class MyClass
  
   {
  
   public int x = 200;
  
   public int y;
  
   }
  
   }
  
  
  
   public class MyDerivedC : MyBaseC
  
   {
  
   new public class MyClass // nested type hiding the base type members
  
   {
  
   public int x = 100;
  
   public int y;
  
   public int z;
  
   }
  
  
  
   public static void Main()
  
   {
  
   // Creating object from the overlapping class:
  
   MyClass S = new MyClass();
  
  
  
   // Creating object from the hidden class:
  
   MyBaseC.MyClass S = new MyBaseC.MyClass();
  
  
  
   Console.WriteLine(S.x);
  
   Console.WriteLine(S.x);
  
   }
  
   }
  


  输出

  

  
 

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号