zoukankan      html  css  js  c++  java
  • C#中的new修饰符

    (1)new 运算符 用于创建对象和调用构造函数
    (2)new 修饰符 用于隐藏基类成员的继承成员。
    (3)new 约束 用于在泛型声明中约束可能用作类型参数的参数的类型。

    MSDN:在用作声明修饰符时,new 关键字可以显式隐藏从基类继承的成员。 隐藏继承的成员时,该成员的派生版本将替换基类版本。 虽然可以不使用 new 修饰符来隐藏成员,但将收到编译器警告。 如果使用 new 来显式隐藏成员,将禁止此警告。

    复制代码
     1 public class BaseClass
     2    {
     3        public void DisplayName()
     4        {
     5            Console.WriteLine("BaseClass");
     6        }
     7    }
     8  
     9 public class DerivedClass : BaseClass
    10    {
    11        public virtual void DisplayName()
    12        {
    13            Console.WriteLine("DerviedClass");
    14        }
    15    }
    16 
    17  public class SubDerviedClass : DerivedClass
    18    {
    19        public override void DisplayName()
    20        {
    21            Console.WriteLine("SubDerviedClass");
    22        }
    23    }
    24  
    25    public class SuperDerviedClass : SubDerviedClass
    26    {
    27        public new void DisplayName()
    28        {
    29            Console.WriteLine("SuperDerviedClass");
    30        }
    31    }
    复制代码

    个人理解:

    C#和C++是一样的,类中的方法默认是sealed的,派生类是无法重写基类的同名函数的。

    SuperDerviedClass sdc = new SuperDerviedClass();

    依次将对象赋值给其他的类。分表调用DisplayName方法。

    SuperDerviedClass.DisplayName()输出SuperDerviedClass,因为该类没有派生,方法无法被重载。

    SuperDerviedClass.DisplayName()输出SubDerviedClass,该类的派生类的同名方法用new修饰,被隐藏。

    DerivedClass.DisplayName()输出SubDerviedClass,该类的最远派生类重写了改方法。,而再远的类使用new修饰符,方法被隐藏。

    Java的类中的方法默认是virtual的,任何派生类都可以重写父类的方法。

    C#语言还是比较常见的东西,这里我们主要介绍C# new修饰符,包括介绍C# new修饰符与 new 操作符是两个概念等方面。

    C# new修饰符是起什么作用?

    ◆C# new修饰符与 new 操作符是两个概念;

    ◆C# new修饰符用于声明类或类的成员,表示隐藏了基类中同名的成员。而new 操作符用于实例化一个类型;

    ◆C# new修饰符只能用于继承类,一般用于弥补基类设计的不足;

    ◆C# new修饰符和 override 修饰符不可同时用在一个成员上,因为这两个修饰符在含义上互相排斥。

    示例:

    1. using System;  
    2. using System.Collections.Generic;  
    3. using System.Text;  
    4. namespace Example09  
    5. {  
    6. class BaseClass  
    7. {  
    8. //基类设计者声明了一个PI的公共变量,方便进行运算  
    9. public static double PI = 3.1415;  
    10. }  
    11. class DervieClass : BaseClass  
    12. {  
    13. //继承类发现该变量的值不能满足运算精度,于是可以通过new修饰符显式隐藏基类中的声明  
    14. public new static double PI = 3.1415926;  
    15. }  
    16. class Program  
    17. {  
    18. static void Main(string[] args)  
    19. {  
    20. Console.WriteLine(BaseClass.PI);  
    21. Console.WriteLine(DervieClass.PI);  
    22.    
    23. Console.ReadLine();  
    24. }  
    25. }  

    定义类

    修饰符

    注释

    internal

    默认修饰符,当前项目内部访问

    public

    可以有其它项目访问

    abstract

    抽象类,不能实例化,只能继承

    sealed

    密封类,只能实例化,不能继承

    定义成员

    在类的修饰符的约束下,成员的修饰符有如下特性。

    修饰符

    注释

    public

    可以由任何代码访问

    private

    默认修饰符,成员只能由类中的代码访问

    internal

    只能由定义它的程序集(项目)内部的代码访问

    protected

    只能由类或派生类中的代码访问

    定义字段

    字段用标准的变量声明格式和前面介绍的修饰符来定义。

    修饰符

    注释

    readonly

    只能在执行构造函数的过程中,或由初始化赋值语句赋值

    static

    必须通过定义它们的类来访问

    const

    同static,必须通过定义它们的类来访问

    new

    用于继承类中,显式地表明隐藏基类中的同名字段

    定义方法

    修饰符

    注释

    static

    必须通过定义它们的类来访问

    virtual

    方法可以重写

    abstract

    方法必须在非抽象的派生类中重写,只用于抽象类中

    override

    方法编写了一个基类方法(如果方法被重写,就必须使用该关键字)

    extern

    方法定义放在其他地方

    new

    用于继承类中,显式地表明隐藏基类中的同名方法

    定义嵌套类

    在类的修饰符的约束下,成员的修饰符有如下特性。

    修饰符

    注释

    new

    显式地表明隐藏基类中的同名类

  • 相关阅读:
    单片机就那点资源,为啥还要用RTOS?
    JVM 虚拟机参数配置
    C# 多态virtual标记重写 以及EF6 查询性能AsNoTracking
    C# HttpClient发送请求获取接口数据
    C# Socket服务端和客户端通话
    C# 生成图片验证码 图片缩略图 水印
    ADO.NET 帮助类 参数传递 存储过程 分页
    hadoop单机部署
    tengine-sticky
    redis持久化
  • 原文地址:https://www.cnblogs.com/zhangxiaolei521/p/6398452.html
Copyright © 2011-2022 走看看