首页 > 编程语言 >C# new 关键字用法

C# new 关键字用法

时间:2024-03-04 21:01:03浏览次数:40  
标签:C# System AnimalBase 运算符 关键字 using new 构造函数

试题回答参考思路:

一,用法总结:
在c#中,new关键字可用作运算符,声明修饰符,约束。
1)new运算符:new 运算符创建类型的新实例,调用构造函数(如果继承了基类,同时会调用基类的构造函数)。
2)new声明修饰符:
2.1)在用作声明修饰符时,new 关键字可以显式隐藏从基类继承的成员。派生类成员变量被new关键字修饰以后,只能被派生类调用。如果希望重写基类成员变量/方法,可以使用virtual/override修饰关键字。
2.2)派生类如果定义了和基类同名的成员变量/方法,同样会隐藏基类的同名变量/方法,但编译器会警告。 如果使用 new 来修饰,将不显示此警告。
3)new约束:new 约束指定泛型类或方法声明中的类型实参必须有公共的无参数构造函数。 若要使用 new 约束,则该类型不能为抽象类型。

二,测试代码:
本代码基于以下条件进行测试:
操作系统:Windows 11 专业版
开发工具:Microsoft Visual Studio Enterprise 2022 (64 位) - 版本 17.7.3
项目框架:.NET 7.0
1)new 运算符:(参考github中项目:01.new运算符)
//这是 AnimalBase.cs 类
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace _01.new运算符
{
internal class AnimalBase
{
public AnimalBase()
{
Console.WriteLine("我是AnimalBase的构造函数。");
}
}
}

//这是 Dog.cs 类
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace _01.new运算符
{
internal class Dog : AnimalBase
{
public Dog()
{
Console.WriteLine("我是Dog的构造函数。");
}
}
}

//这是 Program.cs 类
using _01.new运算符;
Console.WriteLine("1)new 运算符:调用构造函数");
AnimalBase animalBase = new AnimalBase();
Console.WriteLine("\n1)new 运算符:继承了基类,调用了基类和自己的构造函数");
AnimalBase animalBase1 = new Dog();
Dog dog = new Dog();

标签:C#,System,AnimalBase,运算符,关键字,using,new,构造函数
From: https://www.cnblogs.com/ZJ-CN/p/18052674

相关文章

  • C++ mySQL数据库连接池(windows平台)
    C++MySQL数据库连接池新手学了C++多线程,看了些资料练手写了C++数据库连接池小项目,自己的源码地址关键技术点MySQL数据库编程、单例模式、queue队列容器、C++11多线程编程、线程互斥、线程同步通信和unique_lock、基于CAS的原子整形、智能指针shared_ptr、lambda表达式、生产......
  • si-shi-liu-c
    四十六(C)link考虑第一问。将地图黑白染色,那么每个骨牌占了一黑一白。删去一个骨牌会得到两个空格。由题目知道,这两个空格位置一一对应一个状态。我们只需计数有多少种可能的空格出现的方案。考虑一个骨牌移动,等价于将一个空格从头部前一格移到尾部。那么建图,每个骨牌的头部前......
  • CSES1081:Common Divisors
    传送门题意:找到两个\(gcd\)最大的数。\(n\le2e5,a_i\le1e6\)。一种方法是枚举\(i:1\simn\),\(O(\sqrta_i)\)把\(a_i\)因数的出现次数加一。然后\(i:1000000\sim1\),如果\(cnt[i]>1\),输出\(i\)结束。复杂度\(O(n\sqrtV)\),\(2e8\),可惜CSES的机子跑不过。枚......
  • JAVA面向对象基础:this关键字
    this;this就是一个变量,可以用在方法中,来拿到拿到当前对象   this的应用场景:this主要用来解决变量名称冲突问题的。   this真正解析: ......
  • ROS action教程
    action教程rosaction是topic和service的结合升级版,专门针对某些特殊使用场景,执行时间、执行过程需要连续反馈,比如ros系统给机器人下达目标点,机器人运动到目标点需要一段时间,并且ros系统需要机器人连续的运动反馈,这是控制过程常见的场景。工作结构图如下。ROS官方已经为我们......
  • 从__builtin_eh_return看callee saved register
    问题C++的异常处理看起来是一个比较神奇的功能,能够在运行时穿越堆栈,从异常发生位置直达异常处理位置。通过gcc的代码可以看到,这个堆栈回溯的一个关键步骤是这个宏,其中又使用了gcc的内置指令__builtin_eh_return。网上关于__builtin_eh_return这个内置函数的资料较少,结合gcc的源代......
  • OmniPlan Pro mac版:简单、智能,项目管理新选择!
    OmniPlanPro是一款功能强大的项目管理软件,它以其直观的用户界面和丰富的功能,帮助用户轻松管理各种复杂的项目。无论是个人任务还是团队协作,OmniPlanPro都能提供全面的解决方案,让项目管理变得更加简单高效。→→↓↓载OmniPlanPro首先,OmniPlanPro拥有强大的任务管理功能。用......
  • Go - how the GC works
       ......
  • C++ 简易STL 教程 与 C++ 标准库
    C++STL(标准模板库)是一套功能强大的C++模板类,提供了通用的模板类和函数,这些模板类和函数可以实现多种流行和常用的算法和数据结构,如向量、链表、队列、栈。C++标准模板库的核心包括以下三个组件:组件描述容器(Containers)容器是用来管理某一类对象的集合。C++提供了各种不......
  • C++U5-第06课-广度优先搜索3
    温故知新广搜的概念,编程实现基本流程 二进制矩阵中的最短路径]    【题意分析】找到一个从(0,0)到达(n-1,n-1)的路径并且路径上每一个数字都为0【思路分析】首先如果grid[0][0]=1,那么显然不存在最短路径,因此输出-1。使用dist[x][y]保存左上角单......