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


相关推荐: 家族网站制作贴纸教程视频,用豆子做粘帖画怎么制作?  js实现点击每个li节点,都弹出其文本值及修改  Midjourney怎样加参数调细节_Midjourney参数调整技巧【指南】  Laravel怎么清理缓存_Laravel optimize clear命令详解  node.js报错:Cannot find module &#39;ejs&#39;的解决办法  Laravel API资源类怎么用_Laravel API Resource数据转换  logo在线制作免费网站在线制作好吗,DW网页制作时,如何在网页标题前加上logo?  原生JS实现图片轮播切换效果  Laravel怎么为数据库表字段添加索引以优化查询  深圳网站制作设计招聘,关于服装设计的流行趋势,哪里的资料比较全面?  php静态变量怎么调试_php静态变量作用域调试技巧【解答】  Laravel如何获取当前登录用户信息_Laravel Auth门面使用与Session用户读取【技巧】  宙斯浏览器怎么屏蔽图片浏览 节省手机流量使用设置方法  如何在万网自助建站平台快速创建网站?  网站页面设计需要考虑到这些问题  企业在线网站设计制作流程,想建设一个属于自己的企业网站,该如何去做?  js实现获取鼠标当前的位置  制作电商网页,电商供应链怎么做?  html5怎么画眼睛_HT5用Canvas或SVG画眼球瞳孔加JS控制动态【绘制】  小视频制作网站有哪些,有什么看国内小视频的网站,求推荐?  Laravel怎么在Blade中安全地输出原始HTML内容  Laravel路由Route怎么设置_Laravel基础路由定义与参数传递规则【详解】  如何在VPS电脑上快速搭建网站?  如何快速使用云服务器搭建个人网站?  Python数据仓库与ETL构建实战_Airflow调度流程详解  Laravel Octane如何提升性能_使用Laravel Octane加速你的应用  如何选择可靠的免备案建站服务器?  Bootstrap CSS布局之列表  Laravel如何实现邮件验证激活账户_Laravel内置MustVerifyEmail接口配置【步骤】  详解Android——蓝牙技术 带你实现终端间数据传输  网站制作价目表怎么做,珍爱网婚介费用多少?  百度浏览器ai对话怎么关 百度浏览器ai聊天窗口隐藏  Laravel如何升级到最新版本?(升级指南和步骤)  Laravel如何保护应用免受CSRF攻击?(原理和示例)  nodejs redis 发布订阅机制封装实现方法及实例代码  Edge浏览器如何截图和滚动截图_微软Edge网页捕获功能使用教程【技巧】  作用域操作符会触发自动加载吗_php类自动加载机制与::调用【教程】  如何在阿里云虚拟服务器快速搭建网站?  如何在Windows 2008云服务器安全搭建网站?  iOS验证手机号的正则表达式  Windows驱动无法加载错误解决方法_驱动签名验证失败处理步骤  简单实现jsp分页  mc皮肤壁纸制作器,苹果平板怎么设置自己想要的壁纸我的世界?  东莞市网站制作公司有哪些,东莞找工作用什么网站好?  Laravel安装步骤详细教程_Laravel环境搭建指南  如何快速搭建高效WAP手机网站?  Python3.6正式版新特性预览  如何快速查询网站的真实建站时间?  如何在阿里云部署织梦网站?  Laravel如何创建自定义Facades?(详细步骤)