C#中new的用法及与override的区别分析

发布时间 - 2026-01-11 01:13:07    点击率:

C#中new的用法有三种:

(1)new是运算符,用于创建对象和调用构造函数。如Class1=new Class1();也可以为值类型调用默认的构造函数如int a=new int();此时a=0.

(2)new是修饰符,用于隐藏基类成员的继承成员。override不能隐藏积累成员的继承成员。如:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace A
{
  
  class Program
  {
    abstract public class Test
    {      
      public virtual void Prinf() 
      {
        Console.WriteLine("Abstract Printf...");
      }
    }
    public class Class1 : Test
    {
      
      public override void Prinf() 
      {

        Console.WriteLine("Class One Override Printf...");
      }
       
    }

    public class Class2 : Test
    {
      public new void Prinf()
      {

        Console.WriteLine("Class Two New Printf...");
      }
    }
 
    
    static void Main(string[] args)
    {

      Class1 cls1 = new Class1();
      Class2 cls2 = new Class2();
      cls1.Prinf();
      cls2.Prinf();
      ((Test)cls1).Prinf();
      ((Test)cls2).Prinf();

      Console.ReadLine();    

    }
  }
}

运行结果表明:new修饰符隐藏了重写方法,通过将派生对象转为为基类对象,调用了基类的方法。而override则是完全重写了方法,即便是转为基类对象也调用的也是派生类的重写方法。

即:new隐藏的基类方法,override重写基类方法。

(3)new是约束。用在泛型中添加类型的约束。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace A
{
  class Test<T>
    where T : new()//定义类型T的约束,表示T类型必须有不带参数的构造函数
  {
    public T GetItem()
    {
      return new T();//如果不添加new()约束,编译错误:变量类型“T”没有 new() 约束,因此无法创建该类型的实例
              //想一下,T类型不知道,编译器不知道分配多大的空间,所以会通过反射技术实现
    }
  }
  class TClass
  {
    private int a;
    
    public TClass() //如果不添加无参构造函数,编译错误:TClass必须是具有公共的无参数构造函数的非抽象类型,才能用作泛型类型或方法“A.Test<T>”中的参数“T”
    {

    }
    public TClass(int a)
    {
      this.a = a;
    }
  }

  class Program
  {
  
    static void Main(string[] args)
    {
      Test<TClass> test = new Test<TClass>();

      Console.ReadLine();    

    }
  }
}

注释:参考http://msdn.microsoft.com/zh-cn/library/sd2w2ew5.aspx


# C#  # new  # 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的区别分析  # 重写  # 修饰符  # 则是  # 也可  # 写了  # 多大  # 不带  # 用在  # 有三种  # 运算符  # 派生类  # 即便是  # Program  # abstract  # Linq  # namespace  # Text  # Prinf  # Console  # WriteLine 


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


相关推荐: 网站制作壁纸教程视频,电脑壁纸网站?  Android利用动画实现背景逐渐变暗  详解jQuery中基本的动画方法  C#如何调用原生C++ COM对象详解  北京专业网站制作设计师招聘,北京白云观官方网站?  Windows10如何删除恢复分区_Win10 Diskpart命令强制删除分区  ChatGPT回答中断怎么办 引导AI继续输出完整内容的方法  Laravel如何使用Sanctum进行API认证?(SPA实战)  Laravel Blade组件怎么用_Laravel可复用视图组件的创建与使用  如何用PHP工具快速搭建高效网站?  Laravel怎么连接多个数据库_Laravel多数据库连接配置  制作公司内部网站有哪些,内网如何建网站?  Microsoft Edge如何解决网页加载问题 Edge浏览器加载问题修复  Laravel如何使用Gate和Policy进行权限控制_Laravel权限判定与策略规则配置  Laravel如何发送邮件_Laravel Mailables构建与发送邮件的简明教程  iOS中将个别页面强制横屏其他页面竖屏  laravel怎么配置和使用PHP-FPM来优化性能_laravel PHP-FPM配置与性能优化方法  如何在 Telegram Web View(iOS)中防止键盘遮挡底部输入框  深入理解Android中的xmlns:tools属性  Swift中switch语句区间和元组模式匹配  Laravel中的Facade(门面)到底是什么原理  网站图片在线制作软件,怎么在图片上做链接?  如何注册花生壳免费域名并搭建个人网站?  公司门户网站制作流程,华为官网怎么做?  微信h5制作网站有哪些,免费微信H5页面制作工具?  网站制作免费,什么网站能看正片电影?  EditPlus 正则表达式 实战(3)  怎样使用JSON进行数据交换_它有什么限制  微信小程序 input输入框控件详解及实例(多种示例)  Laravel怎么实现搜索高亮功能_Laravel结合Scout与Algolia全文检索【实战】  Laravel中间件起什么作用_Laravel Middleware请求生命周期与自定义详解  Laravel如何使用Blade模板引擎?(完整语法和示例)  百度输入法全感官ai怎么关 百度输入法全感官皮肤关闭  香港服务器网站推广:SEO优化与外贸独立站搭建策略  高性能网站服务器部署指南:稳定运行与安全配置优化方案  如何快速搭建安全的FTP站点?  如何快速查询网址的建站时间与历史轨迹?  Win11摄像头无法使用怎么办_Win11相机隐私权限开启教程【详解】  如何在腾讯云服务器上快速搭建个人网站?  ChatGPT常用指令模板大全 新手快速上手的万能Prompt合集  微信小程序 require机制详解及实例代码  Laravel如何记录日志_Laravel Logging系统配置与自定义日志通道  电商网站制作价格怎么算,网上拍卖流程以及规则?  如何快速上传自定义模板至建站之星?  网站制作大概要多少钱一个,做一个平台网站大概多少钱?  浏览器如何快速切换搜索引擎_在地址栏使用不同搜索引擎【搜索】  独立制作一个网站多少钱,建立网站需要花多少钱?  原生JS实现图片轮播切换效果  如何在Tomcat中配置并部署网站项目?  如何自定义safari浏览器工具栏?个性化设置safari浏览器界面教程【技巧】