C#中new的几种用法详解

发布时间 - 2026-01-10 23:19:44    点击率:

在 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#  # new  # 详解C#用new和override来实现抽象类的重写区别  # 深入理解C#中new、override、virtual关键字的区别  # C#基础知识之new关键字介绍  # C#中Override关键字和New关键字的用法详解  # C#中new和override的区别个人总结  # .net(c#)中的new关键字详细介绍  # 基于C# 中可以new一个接口?的问题分析  # C# new和override的区别分析  # C#中new的用法及与override的区别分析  # 修饰符  # 运算符  # 类中  # 如何使用  # 这一  # 它是  # 请使用  # 应用于  # 所示  # 将此  # 说明了  # 它将  # 也说  # 若要  # 默认值  # 情况下  # 代之以  # 都必须  # 在同一  # style 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: Laravel怎么实现一对多关联查询_Laravel Eloquent模型关系定义与预加载【实战】  Laravel怎么创建自己的包(Package)_Laravel扩展包开发入门到发布  如何在阿里云虚拟机上搭建网站?步骤解析与避坑指南  韩国代理服务器如何选?解析IP设置技巧与跨境访问优化指南  Laravel怎么导出Excel文件_Laravel Excel插件使用教程  Laravel队列由Redis驱动怎么配置_Laravel Redis队列使用教程  Laravel如何创建自定义Artisan命令?(代码示例)  Android自定义控件实现温度旋转按钮效果  Laravel中间件起什么作用_Laravel Middleware请求生命周期与自定义详解  企业网站制作这些问题要关注  Laravel定时任务怎么设置_Laravel Crontab调度器配置  Win11怎么修改DNS服务器 Win11设置DNS加速网络【指南】  如何在企业微信快速生成手机电脑官网?  深入理解Android中的xmlns:tools属性  Laravel如何监控和管理失败的队列任务_Laravel失败任务处理与监控  Laravel怎么在Blade中安全地输出原始HTML内容  Laravel如何安装使用Debugbar工具栏_Laravel性能调试与SQL监控插件【步骤】  桂林网站制作公司有哪些,桂林马拉松怎么报名?  如何快速搭建高效可靠的建站解决方案?  图册素材网站设计制作软件,图册的导出方式有几种?  阿里云高弹*务器配置方案|支持分布式架构与多节点部署  php中::能调用final静态方法吗_final修饰静态方法调用规则【解答】  微信小程序 wx.uploadFile无法上传解决办法  laravel怎么用DB facade执行原生SQL查询_laravel DB facade原生SQL执行方法  百度输入法ai组件怎么删除 百度输入法ai组件移除工具  微信小程序 canvas开发实例及注意事项  Laravel如何集成第三方登录_Laravel Socialite实现微信QQ微博登录  5种Android数据存储方式汇总  html如何与html链接_实现多个HTML页面互相链接【互相】  EditPlus中的正则表达式 实战(4)  微信小程序 五星评分(包括半颗星评分)实例代码  瓜子二手车官方网站在线入口 瓜子二手车网页版官网通道入口  Laravel如何使用Sanctum进行API认证?(SPA实战)  如何快速搭建高效香港服务器网站?  东莞市网站制作公司有哪些,东莞找工作用什么网站好?  Laravel如何使用API Resources格式化JSON响应_Laravel数据资源封装与格式化输出  打开php文件提示内存不足_怎么调整php内存限制【解决方案】  Laravel怎么返回JSON格式数据_Laravel API资源Response响应格式化【技巧】  网站设计制作书签怎么做,怎样将网页添加到书签/主页书签/桌面?  如何用西部建站助手快速创建专业网站?  今日头条微视频如何找选题 今日头条微视频找选题技巧【指南】  如何在香港服务器上快速搭建免备案网站?  如何在橙子建站上传落地页?操作指南详解  QQ浏览器网页版登录入口 个人中心在线进入  Laravel如何与Inertia.js和Vue/React构建现代单页应用  谷歌Google入口永久地址_Google搜索引擎官网首页永久入口  如何快速配置高效服务器建站软件?  魔方云NAT建站如何实现端口转发?  详解免费开源的DotNet二维码操作组件ThoughtWorks.QRCode(.NET组件介绍之四)  百度输入法ai面板怎么关 百度输入法ai面板隐藏技巧