.net(c#)中的new关键字详细介绍

下面我来详细讲解一下在.NET(C#)中的new关键字的使用。

什么是new关键字

在面向对象的编程中,我们经常需要定义类及其成员。有时候,我们需要在一个派生类型中重新定义一个类的成员,这样我们就可以重新定义其行为,这时我们就可以使用new关键字。

关于new关键字的使用规则是:
- 当我们使用new关键字声明一个成员时,它会隐藏基类的同名成员。
- 当我们在一个派生类中重新定义一个成员时,使用new关键字告诉编译器,这个新成员是有意义的,不是错误。
- 如果不使用new关键字并且在派生类中定义一个与基类同名的成员,编译器会给出警告。因为在基类中定义的同名成员会被派生类的成员隐藏起来,导致编译期类型检查问题。

如何使用new关键字

new关键字主要有如下两种用法:

方法中的new关键字

使用方法中的new关键字会隐藏父类的同名方法,但不是重写已有的方法。

示例:

class A
{
    public void Method1()
    {
        Console.WriteLine("Class A's Method1()");
    }
}

class B : A
{
    public new void Method1()
    {
        Console.WriteLine("Class B's Method1()");
    }
}

class Program
{
    static void Main(string[] args)
    {
        B b = new B();
        b.Method1(); // 输出结果:Class B's Method1()
        A a = b;
        a.Method1(); // 输出结果:Class A's Method1()
        Console.ReadLine();
    }
}

当我们通过子类实例调用这个方法时,实际上调用的是子类中的重载方法。如果我们将此实例转换成父类接口类型,再调用这个方法时,调用的是基类中的方法,而不是子类中的方法。

属性/变量中的new关键字

使用属性/变量中的new关键字会隐藏父类的同名属性/变量。

示例:

class A
{
    public int MyInt = 1;
}

class B : A
{
    public new int MyInt = 2;

    public void ShowResult()
    {
        Console.WriteLine("MyInt in A: {0}", base.MyInt);
        Console.WriteLine("MyInt in B: {0}", MyInt);
    }
}

class Program
{
    static void Main(string[] args)
    {
        B b = new B();
        b.ShowResult(); // 输出结果:MyInt in A: 1,在B中:2
        Console.ReadLine();
    }
}

在此示例中,我们定义了两个MyInt变量,分别位于A类和B类中。为了使这个示例更加清晰,我们可以使用ShowResults方法,在控制台中显示这两个MyInt变量的值。在ShowResults方法中,我们可以使用base关键字访问基类中的MyInt变量,使用MyInt关键字访问子类中的MyInt变量。

总结

这里,我们介绍了.NET(C#)中的new关键字,它主要用于隐藏父类的同名成员。我们讨论了new关键字在方法、属性和变量中的使用方法,并且提供了两个示例来说明使用new的工作原理。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:.net(c#)中的new关键字详细介绍 - Python技术站

(0)
上一篇 2023年5月31日
下一篇 2023年5月31日

相关文章

  • .Net WInform开发笔记(三)谈谈自制控件(自定义控件)

    针对“.Net WInform开发笔记(三)谈谈自制控件(自定义控件)”这篇文章,我来给您进行详细的讲解和说明。 一、文章简介及目的 该篇文章主要介绍自定义控件的基本概念和实现方法,旨在帮助读者了解自定义控件的开发流程和技巧,提高自己的WinForm控件开发能力。 二、文章内容分析 1.控件的基本结构和实现方法 作者首先讲解了控件的基本结构和实现方法,包括:…

    C# 2023年5月31日
    00
  • C#利用ODP.net连接Oracle数据库的操作方法

    C#利用ODP.net连接Oracle数据库的操作方法 简介 Oracle Data Provider for .NET(简称ODP.net)是Oracle公司自己提供的一种开发工具,ODP.net 是用于 .NET Framework 的 Oracle 数据提供程序,支持数据访问和数据源包装。 使用 ODP.net 需要在客户端安装 Oracle 数据库。…

    C# 2023年6月2日
    00
  • C#6.0中你可能不知道的新特性总结

    C#6.0是微软在2015年发布的新版本,增加了不少新特性。本文将对C#6.0中一些可能被忽略的新特性进行总结和分享。 1. 自动属性初始值设定 在C#6.0引入了自动属性初始值设定,开发者可以为属性提供一个初始值,而不必在构造函数中进行设置。这种方式可以更加方便快捷地编写C#代码。 示例: public class Person { public stri…

    C# 2023年5月31日
    00
  • C#实现一个简单实用的TXT文本操作及日志框架详解

    C#实现一个简单实用的TXT文本操作及日志框架详解 在C#开发中,文本操作是非常常见的需求,而日志框架则是为了记录程序执行过程中的关键数据和错误信息等,方便开发者进行问题定位和排查。本文将详细讲解如何使用C#实现一个简单实用的TXT文本操作及日志框架。 实现TXT文本操作 实现TXT文本操作需要使用到C#的System.IO命名空间下的File类和Strea…

    C# 2023年5月15日
    00
  • C#将配置文件appsetting中的值转换为动态对象调用

    将配置文件appsettings中的值转换为动态对象调用,可以使用C#中的Configuration API和ExpandoObject类。 以下是具体实现步骤: 1、添加配置文件 在项目的根目录下,添加一个名为appsettings.json的文件,用于存储应用程序的配置信息: { "AppSettings": { "MyKe…

    C# 2023年5月31日
    00
  • ASP.NET 2.0中的数据操作之八:使用两个DropDownList过滤的主/从报表

    下面我将详细讲解“ASP.NET 2.0中的数据操作之八:使用两个DropDownList过滤的主/从报表”攻略: 简介 在ASP.NET 2.0中,使用两个DropDownList过滤的主/从报表非常常见。这种形式的报表,允许用户通过选择主报表中的某个选项,从而动态变更从报表中的数据。本文将介绍如何使用两个DropDownList来过滤和呈现报表数据。 步…

    C# 2023年5月31日
    00
  • C#使用NPOI实现Excel和DataTable的互转

    这里是使用NPOI实现Excel和DataTable互转的完整攻略,包括具体的步骤和两条示例说明。 1. 安装NPOI库 首先需要安装NPOI库,可以使用NuGet进行安装。在Visual Studio中打开NuGet控制台,输入以下命令来安装NPOI库: Install-Package NPOI 2. 读取Excel文件 读取Excel文件可以使用HSSF…

    C# 2023年5月31日
    00
  • C#实现对用户输入数据进行校验的类实例

    接下来我将为你详细讲解“C#实现对用户输入数据进行校验的类实例”的完整攻略。在这个过程中,我们将会涉及到以下几个步骤: 创建一个校验器类 编写数据校验规则 在表单提交时进行数据校验 下面我们逐步来详细讲解。 创建一个校验器类 首先,我们需要创建一个校验器类,这个类将负责验证用户输入的数据是否符合规范,如果不符合,则返回相应的错误信息。校验器类可以是一个普通的…

    C# 2023年6月7日
    00
合作推广
合作推广
分享本页
返回顶部