new几种用法

摘要:
在C#中,新关键字可以用作运算符、修饰符或约束。新运算符用于创建对象和调用构造函数。新修饰符用于隐藏基类成员的继承成员。在泛型声明中使用新的约束来约束可以用作类型参数的参数类型。允许在没有新修饰符的情况下隐藏成员,但会生成警告。使用new显式隐藏成员将取消此警告并记录派生版本被替换的事实。这个例子不仅展示了如何使用完全限定名来访问隐藏的类成员,还展示了如何用新的修饰符来消除警告消息。

在 C# 中,new 关键字可用作运算符、修饰符或约束。
new 运算符
用于创建对象和调用构造函数。
new 修饰符
用于向基类成员隐藏继承成员。
new 约束
用于在泛型声明中约束可能用作类型参数的参数的类型。
new 修饰符(C# 参考)
在用作修饰符时,new 关键字可以显式隐藏从基类继承的成员。隐藏继承的成员意味着该成员的派生版本将替换基类版本。在不使用 new 修饰符的情况下隐藏成员是允许的,但会生成警告。使用 new 显式隐藏成员会取消此警告,并记录代之以派生版本这一事实。
若要隐藏继承的成员,请使用相同名称在派生类中声明该成员,并使用 new 修饰符修饰该成员
new 运算符(C# 参考)
用于创建对象和调用构造函数。例如:
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 修饰符消除警告消息。

1 using System;
2
3 public class MyBaseC
4
5 {
6
7 public class MyClass
8
9 {
10
11 public int x = 200;
12
13 public int y;
14
15 }
16
17 }
18
19
20
21 public class MyDerivedC : MyBaseC
22
23 {
24
25 new public class MyClass // nested type hiding the base type members
26
27 {
28
29 public int x = 100;
30
31 public int y;
32
33 public int z;
34
35 }
36
37
38
39 public static void Main()
40
41 {
42
43 // Creating object from the overlapping class:
44
45 MyClass S1 = new MyClass();
46
47
48
49 // Creating object from the hidden class:
50
51 MyBaseC.MyClass S2 = new MyBaseC.MyClass();
52
53
54
55 Console.WriteLine(S1.x);
56
57 Console.WriteLine(S2.x);
58
59 }
60
61 }
62
输出

100

200

免责声明:文章转载自《new几种用法》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Xenu Link Sleuth 简单好用的链接测试工具 使用说明Android Fragment使用(二) 嵌套Fragments (Nested Fragments) 的使用及常见错误下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

【07】覆盖物(百度地图覆盖物笔记)

【07】覆盖物 地图覆盖物概述 所有叠加或覆盖到地图的内容,我们统称为地图覆盖物。如标注、矢量图形元素(包括:折线和多边形和圆)、信息窗口等。覆盖物拥有自己的地理坐标,当您拖动或缩放地图时,它们会相应的移动。 地图API提供了如下几种覆盖物: Overlay:覆盖物的抽象基类,所有的覆盖物均继承此类的方法。 Marker:标注表示地图上的点,可自定义标注...

Js基础知识4-函数的三种创建、四种调用(及关于new function()的解释)

在js中,函数本身属于对象的一种,因此可以定义、赋值,作为对象的属性或者成为其他函数的参数。函数名只是函数这个对象类的引用。 函数定义 1 //函数的三种创建方法(定义方式) 2 function one(){ //函数声明语句,不属于任何对象,始终默认为全局对象 3 console.log(...

读书笔记-单元测试艺术(三)-使用桩对象解除依赖

一、几个概念 1.什么是外部依赖 外部依赖是指在系统中代码与其交互的对象,而且无法对其做人为控制。 最常见的例子是文件系统、线程、内存和时间等,我们使用桩对象来处理外部依赖问题。 2.什么是桩对象 桩对象是对系统中现有依赖的一个替代品,可人为控制。 通过使用桩对象,无需涉及依赖项,即可直接对代码进行测试。 3.什么是重构 重构是指不影响已有功能而改变代码设...

前端经典面试题解密:JS的new关键字都干了什么?

前言 new关键字在实例化获取对象时都做了什么?是一道经常出现在前端面试时的问题。如果只是简单的了解new关键字是实例化构造函数获取对象,是万万不能够的。更深入的层级发生了什么呢?同时面试官想从这道题里面考察什么呢?下面胡哥为各位小伙伴一一来解密。 一、new关键字 new关键字的作用:通过new关键字实例化构造函数,获取对象。说一千道一万,不如来段代码看...

[翻译] Autofac 中注册的概念

原文链接:http://docs.autofac.org/en/latest/register/registration.html 所谓注册组件,是指创建 ContainerBuilder 的实例,并告诉它哪些组件暴露哪些服务。 组件可以用反射创建,可以提供已经创建好的对象的实例,还可以用拉姆达表达式创建。ContainerBuilder 有一组 Regi...

C#的面向对象之继承与多态

1、继承的两个特性:传递性、单根性 2、多态 同一操作作用于不同类的实例,不同的类将进行不同的解释,最后产生不同的执行结果。 3、调用父类的成员的关键字:base 4、父类中的成员如果采用private修饰符,它将作为私有成员,其他任何类都无法访问。 5、如果将父类中的成员设置为公有(public)成员,则任何类都可以访问该成员,这不符合我们的要求。 6、...