一、在C#中,new这个关键字使用频率非常高,主要有3个功能:

a)     作为运算符用来创建一个对象和调用构造函数。

b)     作为修饰符。

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

1.new 运算符 用于创建对象和调用构造函数。

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

  例:People p=new People();

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

  例:int num= new int();

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

  3.不能重载 new 运算符。

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

2.new 修饰符 用于向基类成员隐藏继承成员。

  使用 new 修饰符显式隐藏从基类继承的成员。若要隐藏继承的成员,请使用相同名称在派生类中声明该成员,并用 new 修饰符修饰它。在用作修饰符时,new关键字可以在派生类中隐藏基类的方法,也就说在使用派生类的方法是调用的方法是New关键字新定义出来的方法,而不是基类的方法。在不使用New关键字来隐藏基类方法也是可以的,编译器会出现一个警告,提示如果有意去隐藏基类的方法,请使用New关键字修饰。

  这里有个注意事项就是New和Override这两个关键字是互斥的。不可以同时使用。

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

  new() 约束的意思是 传入的类参数必须具有可访问的无参数(或默认)的构造函数.也就是说传入的这个类必定能通过new()来进行实例化.

  如果类 T 有new约束,就可以在泛型定义里使用new T()方法

  Override关键字主要是提供派生类对基类方法的新实现,重写的基类方法必须和Override的方法具有相同的签名,此关键字不可以用于重写非虚方法和静态方法,与其配套使用的关键字是Virtual、abstract、Override。与此同时,Override方法还不可以修改Virtual方法的可访问性,Override方法和Virtual方法必须具有相同的访问修饰符,不能使用修饰符 new、static、virtual 或 abstract 来修改 override 方法。

以下是一个小demo,展示了new和override的本质区别:

class Program

{

static void Main(string[] args)

{

contact ct1 = new class1();

contact ct2 = new class2();

ct1.prinf();

ct2.prinf();

}

}

abstract public class contact

{

public virtual void prinf()

{

Console.WriteLine ("这是虚方法");

}

}

public class class1 : contact

{

public override void prinf()

{

Console.WriteLine ("这是新的方法");

}

}

public class class2 : contact

{

public new void prinf()

{

Console.WriteLine ("这是另一个新的方法");

}

}

C#的New关键字的几种用法的更多相关文章

  1. .NET(c#)new关键字的三种用法

    前几天去家公司面试,有一道这样的题:写出c#中new关键字的三种用法,思前想后挖空心思也只想出了两种用法,回来查了下msdn,还真是有第三种用法:用于在泛型声明中约束可能用作类型参数的参数的类型,这是 ...

  2. NEW关键字的三种用法

    最近面试中有一道题是写new关键字的几种用法,想了下写下我知道的两种用法 第一种 创建对象.调用构造函数,这就不用讲了 ClassA  A=new ClassA(); 第二种 是作为修饰符,显示隐藏继 ...

  3. c# new关键字的三种用法

    三种用法如下: 在 C# 中,new 关键字可用作运算符.修饰符或约束. 1)new 运算符:用于创建对象和调用构造函数. 2)new 修饰符:在用作修饰符时,new 关键字可以显式隐藏从基类继承的成 ...

  4. 【转载】java final 关键字的几种用法

    原文链接点这里,感谢博主分享 在java的关键字中,static和final是两个我们必须掌握的关键字.不同于其他关键字,他们都有多种用法,而且在一定环境下使用,可以提高程序的运行性能,优化程序的结构 ...

  5. 【转载】java static 关键字的四种用法

    原文链接点这里,感谢博主分享 在java的关键字中,static和final是两个我们必须掌握的关键字.不同于其他关键字,他们都有多种用法,而且在一定环境下使用,可以提高程序的运行性能,优化程序的结构 ...

  6. [java]final关键字的几种用法

    在java的关键字中,static和final是两个我们必须掌握的关键字.不同于其他关键字,他们都有多种用法,而且在一定环境下使用,可以提高程序的运行性能,优化程序的结构.下面我们来了解一下final ...

  7. [java]static关键字的四种用法

    在java的关键字中,static和final是两个我们必须掌握的关键字.不同于其他关键字,他们都有多种用法,而且在一定环境下使用,可以提高程序的运行性能,优化程序的结构.下面我们先来了解一下stat ...

  8. final关键字的几种用法

    在java的关键字中,static和final是两个我们必须掌握的关键字.不同于其他关键字,他们都有多种用法,而且在一定环境下使用,可以提高程序的运行性能,优化程序的结构.下面我们来了解一下final ...

  9. java中 this 关键字的三种用法

    Java中this的三种用法 调用属性 (1)this可以调用本类中的任何成员变量 调用方法(可省略) (2)this调用本类中的成员方法(在main方法里面没有办法通过this调用) 调用构造方法 ...

  10. Static 关键字的 5 种用法,你会几种?

    );                      System.out.println(Thread.currentThread().getName()                         ...

随机推荐

  1. 配置handler vs2013 iis8.0

    <system.webServer> <modules runAllManagedModulesForAllRequests="true" /> <v ...

  2. Web之路笔记之四

    2014秋季学期Web2.0课程作业 <Homework1 - Recipe> 给出内容的文本文档,根据要求编写html和css.基本上没有难点. 1. 需要添加标签栏名称前面的小图标,是 ...

  3. 媒体查询使用方法@media

    Media Queries能在不同的条件下使用不同的样式,使页面在不同在终端设备下达到不同的渲染效果.前面简单的介绍了Media Queries如何引用到项目中,但Media Queries有其自己的 ...

  4. 为了防止采集,把文章中出现的URL链接随机大小写(PHP实现)

    <?php $string = "http://www.kxblogs.com/n/20161115/74439155.html"; $string = explode('/ ...

  5. volatile关键字及编译器指令乱序总结

    本文简单介绍volatile关键字的使用,进而引出编译期间内存乱序的问题,并介绍了有效防止编译器内存乱序所带来的问题的解决方法,文中简单提了下CPU指令乱序的现象,但并没有深入讨论. 以下是我搭建的博 ...

  6. iOS-申请邓白氏编码的超详细流程介绍

    导读 11.22号要申请苹果公司开发者账号,所以当天下午申请了邓白氏编码,昨天邓白氏编码下来了,这里就做一下记录,分享给大家. 概览 11.22提交的邓白氏编码申请,11.28(礼拜一)华夏邓白氏发来 ...

  7. Java IO教程

    1  Java IO 教程 2 Java IO 概述 3 Java IO: 文件 4 Java IO: 管道 5 Java IO: 网络 6 Java IO: 字节和字符数组 7 Java IO: S ...

  8. Javascript学习笔记2.1 Javascript与DOM简介

    DOM(文档对象模型)简介 DOM(文档对象模型)针对HTML和XML文档的一个API. DOM可以将任何HTML或XML文档描绘成由多层节点构成的树形结构,它是中立于平台和语言的接口,允许程序和脚本 ...

  9. Node.js的cluster模块——Web后端多进程服务

    众所周知,Node.js是单线程的,一个单独的Node.js进程无法充分利用多核.Node.js从v0.6.0开始,新增cluster模块,让Node.js开发Web服务时,很方便的做到充分利用多核机 ...

  10. 从.NET平台调用Win32 API

    MSDN文章<Microsoft Win32 to Microsoft .NET Framework API Map> 介绍了.net 类库对win32的封装 从.NET平台调用Win32 ...