new修饰符主要是用来隐藏从基类继承的成员. 这句话怎么理解呢,就是说有一个类,它有一个继承类,继承类中存在和基类中一样名称的成员(属性,方法等). 对继承类中的该成员使用new修饰符时,调用时将会隐藏其基类中的该成员

举个例子如下:

public class BaseC
{
public int x;
public void MyTest() {}
} public class DerivedC : BaseC
{
public new void MyTest() {}
}

类DerivedC继承类BaseC,在继承类中有一个和基类中同名的方法MyTest(), 使用new修饰符隐藏了基类的MyTest()方法。基类BaseC的字段x不受影响,因为没有使用类似名称将其隐藏.

另外,对同一个成员同时使用new和override是错误的做法,因为这两个修饰符的含义互斥。

new修饰符和override修饰符的区别

new修饰符 --- 以同样的名称创建一个新成员并使原始成员变为隐藏

override修饰符 --- 扩展继承成员的实现

再举一个例子:

public class BaseC
{
public static int x = ;
public static int y =; } public class DerivedC : BaseC
{ //Hide field 'x'
new public static int x = ; static void Main()
{
//display the new value of x
Console.WriteLine(x); // display the hidden value of x
Console.WriteLine(BaseC.x); //display the unhidden member y
Console.WriteLine(y); }
} /*
output:
75
45
15
*/

下面再举一个嵌套类的例子

public class MyBaseClass
{ public class MyNestedClass
{
public int x = ;
public int y; } } public class MyDerivedClass : MyBaseClass
{
//Nested type hiding the base type members
new public class MyNestedClass
{
public int x = ;
public int y;
public int z; } static void Main()
{
//creating an object from the overlapping class
MyNestedClass myClass1 = new MyNestedClass (); //Creating an object from the hidden class
MyBaseClass.MyNestedClass myClass2 = new MyBaseClass.MyNestedClass() Console.WriteLine(myClass1.x);
Console.WriteLine(myClass2.x); }
} /* Output
1000
2000
*/

如果在继承类MyDerivedClass的嵌套类MyNestedClass中移除new修饰符,程序一样会编译和运行,但你将会收到以下警告

The keyword new is required on 'MyDerivedClass.x' because it hides inherited member 'MyBaseClass.x'.

C#中的new修饰符说明的更多相关文章

  1. [.net 面向对象编程基础] (8) 基础中的基础——修饰符

    [.net 面向对象编程基础] (8) 基础中的基础——修饰符 在进入C#面向对象核心之前,我们需要先对修饰符有所了解,其实我们在前面说到变量和常量的时候,已经使用了修饰符,并且说明了变量和常量的修改 ...

  2. php中的访问修饰符 private、protected、public的作用范围

    1. private 只能在类内部使用 2. protected 可以在类内部和继承类里使用.类外部不能使用[即实例化后的对象无法调用] 3. public 全部范围适用. 4.子类复写父类中的方法时 ...

  3. java中的类修饰符、成员变量修饰符、方法修饰符。

    类修饰符: public(访问控制符),将一个类声明为公共类,他可以被任何对象访问,一个程序的主类必须是公共类. abstract,将一个类声明为抽象类,没有实现的方法,需要子类提供方法实现. fin ...

  4. 详解Java中的访问控制修饰符(public, protected, default, private)

    Java中的访问控制修饰符已经困惑笔者多时,其中较复杂的情况一直不能理解透彻.今天下定决心,系统.全面地研究Java中的访问控制修饰符的所有方面,并整理成这篇文章,希望有同样疑惑的读者读完后能有所收获 ...

  5. C# 中的sealed修饰符学习

    转载原地址 http://developer.51cto.com/art/200908/147327.htm C#语言还是比较常见的东西,这里我们主要介绍C# sealed修饰符,包括介绍两个修饰符在 ...

  6. Java学习笔记十九:Java中的访问控制修饰符

    Java中的访问控制修饰符 一:Java修饰符的种类: 访问修饰符 非访问修饰符 修饰符用来定义类.方法或者变量,通常放在语句的最前端.我们通过下面的例子来说明: public class Hello ...

  7. 20151024_004_C#基础知识(C#中的访问修饰符,继承,new关键字,里氏转换,is 和 as,多态,序列化与反序列化)

    1:C#中的访问修饰符 public: 公共成员,完全公开,没有访问限制. private: 私有的,只能在当前类的内部访问. protected: 受保护的,只能在当前类的内部以及该类的子类中访问. ...

  8. 分享知识-快乐自己:java 中的访问修饰符

    1):Java中的访问修饰符: Java面向对象的基本思想之一是封装细节并且公开接口.Java语言采用访问控制修饰符来控制类及类的方法和变量的访问权限,从而向使用者暴露接口,但隐藏实现细节. 访问控制 ...

  9. java中4种修饰符访问权限的区别及详解全过程

    java中4种修饰符访问权限的区别及详解全过程 http://jingyan.baidu.com/article/fedf0737700b3335ac8977ca.html java中4中修饰符分别为 ...

  10. vue中的.passive修饰符

    一.passive作用 详情请参考MDN(https://developer.mozilla.org/zh-CN/docs/Web/API/EventTarget/addEventListener)中 ...

随机推荐

  1. 收缩VC数据库

    注意: 在收缩日志前必须截断事务日志. 一. SQL Server 2008 收缩日志 (1) 使用SQL管理器收缩日志 第一步执行如下命令 ALTER DATABASE dbname SET REC ...

  2. Spring Cloud2.0之整合Consul作为注册中心

    使用Consul来替换Eureka Consul简介 Consul 是一套开源的分布式服务发现和配置管理系统,由 HashiCorp 公司用 Go 语言开发. 它具有很多优点.包括: 基于 raft ...

  3. castle windsor学习-----XML Inline Parameters 内联参数

    当使用XML配置的时候,可能要给组件指定各种各样的依赖 1.简单的参数 参数名称不区分大小写 <component id="ping" type="Acme.Crm ...

  4. python中字符串使用需要注意的地方

    1. r''的使用 'r'是防止字符转义的 如果路径中出现'\t'的话 不加r的话\t就会被转义 而加了'r'之后'\t'就能保留原有的样子 2. u''的使用 引号之前加上字母u时,python会将 ...

  5. spring boot: Bean的初始化和销毁 (一般注入说明(三) AnnotationConfigApplicationContext容器 JSR250注解)

    import org.springframework.context.annotation.AnnotationConfigApplicationContext; 使用AnnotationConfig ...

  6. maven 3.2.5 的安装及简单示例

    http://www.mvnrepository.com 一直没有使用maven,它的作用就不说了,这二天需要用到,发现网上都是以前的版本,所以,我一边配置,一边记录. 一 下载maven 现在很多I ...

  7. BEC listen and translation exercise 44

    But over the past 70 years or so, there's been a massive increase in one type of crime which was wha ...

  8. 关于DLL调试的两个工具(dependency walker和dumpbin.exe)

    Dependency Walker工具: 该工具用来查看dll依赖库和依赖库内的函数. 左上角:模块依赖树,表示该dll所依赖的其它dll文件 右上角:导入函数,即与当前根模块有关系的函数(即根模块或 ...

  9. PS 滤镜——(扭曲)球面化 Spherize

    %%%% Spherize clc; clear all; close all; addpath('E:\PhotoShop Algortihm\Image Processing\PS Algorit ...

  10. CCUserDefault 存档

    void HelloWorld::testCCUserDefault() { CCSize size = CCDirector::sharedDirector()->getWinSize(); ...