C#中new的几种用法详解

 更新时间:2017年02月28日 11:24:33   作者:李斌1  
本文主要介绍了C#中new的几种用法,具有很好的参考价值,下面跟着小编一起来看下吧

在 C# 中,new 关键字可用作运算符、修饰符或约束。

new 运算符

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

new 修饰符

用于向基类成员隐藏继承成员。

new 约束

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

new 修饰符(C# 参考)

在用作修饰符时,new 关键字可以显式隐藏从基类继承的成员。隐藏继承的成员意味着该成员的派生版本将替换基类版本。在不使用 new 修饰符的情况下隐藏成员是允许的,但会生成警告。使用 new 显式隐藏成员会取消此警告,并记录代之以派生版本这一事实。

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

new 运算符(C# 参考)

1.用于创建对象和调用构造函数。例如:

Class1 o = new Class1();

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

 例:int myInt = new int();

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

3.不能重载 new 运算符。

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

new 约束(C# 参考)

new 约束指定泛型类声明中的任何类型参数都必须有公共的无参数构造函数。当泛型类创建类型的新实例时,将此约束应用于类型参数,如下面的示例所示:

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

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

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

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

  3.引入类或结构中的索引器将隐藏具有相同名称的所有基类索引器。

  4.在同一成员上同时使用 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 S1 = new MyClass(); 
   // Creating object from the hidden class: 
  MyBaseC.MyClass S2 = new MyBaseC.MyClass(); 
   Console.WriteLine(S1.x); 
   Console.WriteLine(S2.x); 
   } 
   } 

  输出
  100
  200

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持脚本之家!

相关文章

  • C#同步网络时间的方法实例详解

    C#同步网络时间的方法实例详解

    这篇文章主要介绍了C#同步网络时间的方法,以实例形式较为详细的分析了C#获取网络时间与同步本机系统时间的相关技巧,非常具有实用价值,需要的朋友可以参考下
    2015-05-05
  • C#利用GDI绘制常见图形和文字

    C#利用GDI绘制常见图形和文字

    本文主要介绍了C#中利用GDI来绘制图形和文字的方法,并提供的简单的示例供大家参考学习,希望能够对大家有所帮助。
    2016-03-03
  • C#实现BBcode转为Markdown的方法

    C#实现BBcode转为Markdown的方法

    这篇文章主要给大家介绍了关于C#实现BBcode转Markdown的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧。
    2018-02-02
  • 使用设计模式中的工厂方法模式进行C#编程的示例讲解

    使用设计模式中的工厂方法模式进行C#编程的示例讲解

    这篇文章主要介绍了使用设计模式中的工厂方法模式进行C#编程的示例讲解,工厂方法模式可以看作是对简单工厂模式的进一步扩展,需要的朋友可以参考下
    2016-02-02
  • c# EnumHelper枚举常用操作类

    c# EnumHelper枚举常用操作类

    在项目中需要把枚举填充到下拉框中,所以使用统一的方法实现,测试代码如下,需要的朋友可以参考下
    2016-11-11
  • Visual Studio关于C#项目Dll的引用多种方式(图文详解)

    Visual Studio关于C#项目Dll的引用多种方式(图文详解)

    本文通过图文并茂的形式给大家展示Visual Studio关于C#项目Dll的引用几种方式 ,感兴趣的朋友跟随小编一起看看吧
    2024-08-08
  • c#关于非托管内存的释放问题及解读

    c#关于非托管内存的释放问题及解读

    这篇文章主要介绍了c#关于非托管内存的释放问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-02-02
  • winform实现拖动文件到窗体上的方法

    winform实现拖动文件到窗体上的方法

    这篇文章主要介绍了winform实现拖动文件到窗体上的方法,以实例分析了C#中WinForm操作窗体及文件的相关技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-09-09
  • C#/.net程序调用Python的教程分享

    C#/.net程序调用Python的教程分享

    C#的优势在于window下的开发,不仅功能强大而且开发周期短。而python则有众多的第三方库,可以避免自己造轮子,利用C#来做界面,而具体实现使用python来实现可以大大提高开发效率。本文介绍如何使用pythonnet来执行python脚本,希望对大家有所帮助
    2023-03-03
  • C# 中闭包(Closure)详解

    C# 中闭包(Closure)详解

    这篇文章主要介绍了C# 中闭包(Closure)详解的相关资料,需要的朋友可以参考下
    2017-06-06

最新评论