new 嘛
实例化一个类。
比如有一个类叫汽车。你现在想在程序中买一辆,所以你用new来买了一辆汽车,这辆车你得给你找个名字,比如宝马。呵呵所以就成
汽车 宝马 = new 汽车
你有钱了,你要再来一辆
汽车 奔驰 = new 汽车
但他们都有汽车该有的东西:四个轮子,一个方向盘,发动机,车门。所以都是汽车一类的东西。
你看来还没有理解c#的本质,可以这样,c#所有东西全都是类,一个继承另一个,子类继承父类。
连string都是个类。申明一个字符串变量,就是实例化一个string类。
实例化类这个嘛不是c#才有问题,是面向对象的问题。
一个包装好了的功能的代码块就可以作为一个类。但你不能直接用它,因为面向对象概念中是不允许随便修改类的内容的。要用你就要实例化。就像汽车这个类。你要用行,但你不能改了汽的一些基本性质上的东西。比如你不能让四个轮子变成只有两个。你不能却掉方向盘。但是你不甘心啊,所以你实例化了,系统就给你一个类似于汽车镜像一样的汽车,他有了汽车通有的东西。你自己给他一个名字,以后你就可以随意让车开开停停,改改装装,你说我要加一排灯行,你可以加在你的实例上,但不要加到类上,因为你一加到类上了,别人实例化了的汽车也有一排的灯了,人家又不喜欢怎么办呢。
其实你申明字符串变量的时候一般没有用到new因为这种东西有点儿不一样,系统准许你不用new来声明,直接用
string 变量名
就行了
但用new也没有错,一样是可以的。
c#就是有强大的类库,什么意思呢,就是基本上所有你要完成的程序都可以用c#类库(有很多很多类),实例化你要用的。拼起来就行了。绝大多数类还是要用new的。
在 C# 中,new 关键字可用作运算符或修饰符。
new 运算符 用于在堆上创建对象和调用构造函数。
new 修饰符 用于隐藏基类成员的继承成员。
new 运算符
1.用于创建对象和调用构造函数
例:Class_Test MyClass = new Class_Test();
2.也用于为值类型调用默认的构造函数
例:int myInt = new int();
myInt 初始化为 0,它是 int 类型的默认值。该语句的效果等同于:int myInt = 0;
3.不能重载 new 运算符。
4.如果 new 运算符分配内存失败,则它将引发 OutOfMemoryException 异常。
new 修饰符
使用 new 修饰符显式隐藏从基类继承的成员。若要隐藏继承的成员,请使用相同名称在派生类中声明该成员,并用 new 修饰符修饰它。
请看下面的类:
public class MyClass
{
public int x;
public void Invoke() {}
}
在派生类中用 Invoke 名称声明成员会隐藏基类中的 Invoke 方法,即:
public class MyDerivedC : MyClass
{
new public void Invoke() {}
}
但是,因为字段 x 不是通过类似名隐藏的,所以不会影响该字段。
通过继承隐藏名称采用下列形式之一:
1.引入类或结构中的常数、指定、属性或类型隐藏具有相同名称的所有基类成员。
2.引入类或结构中的方法隐藏基类中具有相同名称的属性、字段和类型。同时也隐藏具有相同签名的所有基类方法。
3.引入类或结构中的索引器将隐藏具有相同名称的所有基类索引器。
4.在同一成员上同时使用 new 和 override 是错误的。
注意:在不隐藏继承成员的声明中使用 new 修饰符将生成警告。
示例
在该例中,基类 MyBaseC 和派生类 MyDerivedC 使用相同的字段名 x,从而隐藏了继承字段的值。该例说明了 new 修饰符的使用。同时也说明了如何使用完全限定名访问基类的隐藏成员。
using System;
public class MyBaseC
{
public static int x = 55;
public static int y = 22;
}
public class MyDerivedC : MyBaseC
{
new public static int x = 100; // Name hiding
public static void Main()
{
// Display the overlapping value of x:
Console.WriteLine(x);
// Access the hidden value of x:
Console.WriteLine(MyBaseC.x);
// Display the unhidden member y:
Console.WriteLine(y);
}
}
输出
100
55
22
如果移除 new 修饰符,程序将继续编译和运行,但您会收到以下警告:
The keyword new is required on 'MyDerivedC.x' because it hides inherited member 'MyBaseC.x'.
如果嵌套类型正在隐藏另一种类型,如下例所示,也可以使用 new 修饰符修改此嵌套类型。
示例
在该例中,嵌套类 MyClass 隐藏了基类中具有相同名称的类。该例不仅说明了如何使用完全限定名访问隐藏类成员,同时也说明了如何使用 new 修饰符消除警告消息。
using System;
public class MyBaseC
{
public class MyClass
{
public int x = 200;
public int y;
}
}
public class MyDerivedC : MyBaseC
{
new public class MyClass // nested type hiding the base type members
{
public int x = 100;
public int y;
public int z;
}
public static void Main()
{
// Creating object from the overlapping class:
MyClass S1 = new MyClass();
// Creating object from the hidden class:
MyBaseC.MyClass S2 = new MyBaseC.MyClass();
Console.WriteLine(S1.x);
Console.WriteLine(S2.x);
}
}
输出
100
200
相关推荐
学习Python,小白如何搭建Python环境?
学习Python,首先需要搭建好Python环境,主要分为【运行环境搭建】、【开发环境搭建】以及【Python环境配置】三个环节,接下来我将对Python环境搭建这三个部分进行介绍。
编程语言详细介绍C#中new的几种用法
编程语言详细介绍C#中new的几种用法 本文主要介绍了C#中new的几种用法,具有很好的参考价值,下面跟着小编一起来看下吧 在 C# 中,new 关键字可用作运算符、修饰符或约束。 new 运算符 用于创建对象和调用构造函数。 new 修饰符 用于向基类成员隐藏继承成员。 new 约束 用于在泛型声明中约束可能用作类型参数的参数的类型。 new 修饰符(C# 参考) 在用作修饰符时,new 关键字可以显式隐藏从基类继承的成员。隐藏继承的成员意味着该成员的派生版本将替换基类版本。在不使
优化求解器性能:当分支切割算法中的gap停滞不前时如何应对
本文深入探讨了当分支切割算法求解复杂整数规划问题时,gap停滞不前的根本原因与应对策略。文章指出gap停滞源于上界(找不到更优整数解)或下界(证明过程缓慢)提升受阻,并提供了从模型改写、自定义割平面、调整搜索策略到参数调优等一系列实战方法,帮助优化工程师有效打破求解僵局,推动gap下降。
C#中的new以及类
使用。
语义通信实战:跳过“比特”保“语义”,手把手构建轻量级图像压缩重建网络(基于PyTorch)
本文详细介绍了基于PyTorch的轻量级语义通信系统LICRnet的实现,专注于图像压缩重建中的语义信息保留。通过深度可分离卷积、可变窗口多尺度注意力等创新技术,显著降低计算量并提升性能,特别适用于无人机巡检、远程医疗等物联网场景。文章包含完整的代码实现、训练策略及部署优化方案。
PyInstaller打包后在Win7无法运行,提示缺少`api-ms-win-core-path-l1-1-0.dll`问题解决
这个问题的关键在于Python 3.12和Windows 7之间的兼容性问题。解决方法是使用Python 3.8.8版本进行打包,确保程序能够在Windows 7系统上运行。如果你也遇到类似的问题,不妨尝试降级Python版本,看看是否能够解决。希望我的经验能够帮到你!如果你在使用PyInstaller打包时遇到其他问题,欢迎留言讨论。
C#的new关键字概述——C#语言学习篇
new 关键字 用途: new 关键字可以给值类型和引用类型的变量做初始化。 值类型使用new 则在栈上初始化 如:int i= new int(); struct s = new struct(); 引用类型使用new则在堆上初始化 如:class c = new class(); new一个对象流程: 在堆开辟空间,栈上进行内存空间指向。 在内存空间中创建对象。 为对象做初始化,为字段、属性...
【系统架构设计师】2025年下半年真题论文回忆版及写作要点
本文摘要围绕云原生数据库、性能测试、无服务器架构和秒杀场景等关键技术进行论述。云原生数据库通过容器化、微服务和自动化运维实现弹性扩展;性能测试需要规划测试场景并关注响应时间等关键指标;无服务器架构以事件驱动为核心,简化开发流程;秒杀场景需组合运用扩容、缓存、限流等技术应对高并发。这些技术方案为构建现代高可用系统提供了重要参考。
.NET(c#)new关键字的三种用法 (转载)
前几天去家公司面试,有一道这样的题:写出c#中new关键字的三种用法,思前想后挖空心思也只想出了两种用法,回来查了下msdn,还真是有第三种用法:用于在泛型声明中约束可能用作类型参数的参数的类型,这是在Framework 2.0 中定义泛行时才会使用到的,自己对c# 2.0 中的支持还只是粗通皮毛,怪不得累死so many脑细胞也没能想不出这第三种来! 三种用法如下:在 C# 中,n
NX二次开发(Python)-UIStyler-选择体和按钮操作
用UG NX的UIStyler块界面编辑器,生成带有“选择体”和“按钮”操作的一个界面,如下图所示:
华为MetaERP国资委语境下的 DRP(全域数字化资源管理平台/Digitalized Resource-management Platform)与传统 ERP(以 SAP、Oracle 为代表)的
【摘要】国资委推动的DRP(全域数字化资源管理平台)正在重构央国企数智化转型路径,其本质是通过"ERP管交易+DRP管管控"的双层架构实现升维替代。与传统ERP相比,DRP具有三大突破:采用国产分布式数据库实现全级次穿透监管、构建数据中台打破信息孤岛、以实时分析替代事后报表。当前政策明确2026-2030年分阶段建设目标,这将重塑产业格局——倒逼传统ERP厂商转型,为云原生/AI/信创企业创造新机遇。需注意DRP并非简单替代ERP,而是通过治理模式变革实现"交易系统做薄、管控中
C# new
在c#中,new是关键字之一,new关键字主要有以下两个用途:运算符、修饰符。
pip install安装markitdown时出现ERROR: ‘packages/markitdown[all]‘ is not a valid editable requirement解决方案
本文主要介绍了pip install安装markitdown时出现ERROR: ‘packages/markitdown[all]’ is not a valid editable requirement解决方案,希望能对使用markitdown的同学们有所帮助。 文章目录 1. 问题描述 2. 解决方案
new、new()和new[]三者的区别
new、new()和new[]三者的区别最近写程序,遇到了new, new()和new[]的三种情况,一时间有点混乱,因此总结如下: 1.new和new() new A 来创建一个不确定值的对象或实例,new() 创建一个值为零的对象或实例.而new(X),用于创建一个被初始化为X的对象或实例. 2.new和new[] new 用于单个对象或者实例的创建,就是调用类的构造函数 n
OV9734 DATASHEET,完整规格书
OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等
WINCC7.3破解文件
WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!
关于#define new DEBUG_NEW
意思是你在debug的模式下所有的new都会被替换成DEBUG_NEW 以下是MSDN中的内容 在 MFC 中,可以使用 DEBUG_NEW 宏代替 new 运算符来帮助定位内存泄漏。在程序的“Debug”版本中,DEBUG_NEW 将为所分配的每个对象跟踪文件名和行号。当编译程序的“Release”版本时,DEBUG_NEW 将解析为不包含文件名和行号信息的简单 new 操作。因此,在程
lwip-2.0.3
lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。
触发器referencing old as old new as new
referencing old as old new as new 代码如下: CREATE OR REPLACE TRIGGER xxx AFTER UPDATE OF STATE ON xxx REFERENCING OLD AS OLD NEW AS NEW FOR EACH ROW 总结 提示:这里对文章进行总结: CREATE OR REPLACE TRIGGER XXX 创建或者替换xxx触发器 FOR EACH ROW 表示在一次操作表的语句中,每操作成功一行就会触发一.
SAP B1中文培訓教材_SDK
公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说
new、new[]和new()
文章目录new是怎么调用的?那么delete呢?new[]和delete[]为什么要成对使用?注意到了operator new和operator delete~new()怎么用?delete()有点复杂 new是怎么调用的? 这里是一条new的使用语句: A *pc = new A(1, 2); 这条语句,编译器会转化为下面样子: A* pc; try { void* mem = operator new(sizeof(A)); //申请内存 pc = static_cast<A*>(m
#define new DEBUG_NEW
在用vc时,利用AppWizard会产生如下代码: #ifdef _DEBUG#define new DEBUG_NEW#undef THIS_FILEstatic char THIS_FILE[] = __FILE__;#endif对于#define new DEBUG_NEW首先看msdn的解释:Assists in finding
浅谈new与::operator new
本文探讨了C++中vector使用迭代器指针替代传统顺序表成员变量的原因。通过分析vector源码发现,其空间操作函数使用operator new/delete而非new/delete,实现了内存分配与对象构造的分离。operator new只分配原始内存,配合placement new在指定位置构造对象,避免了new自动调用构造函数的性能浪费。这种设计符合C++将内存分配与对象构造分离的核心思想,同时operator new的异常处理机制也更符合C++风格。虽然对vector采用三个指针的真正原因解释可能
new实现
new实现 前言 本篇来分析new是怎么实现的, 使用c++进行在申请对象的时候用到new, 但是为什么申请对象要用到new, 而不能用malloc, 而有时申请数组的用new或者malloc似乎又都可以, 这里就来分析一下new实现. new operator, operator new以及placement new new operator用法 其实new operator我们经常在使用,...
深入解析new、operator new、::new、placement new
1. new分为两步 a、内存分配 调用相应的operator new( )分配内存 b、构造函数 调用相应的构造函数 实验代码: 1. class T{ 2. public: 3. T(){ 4. cout &amp;lt;&amp;lt; &quot;构造函数。&quot; &amp;lt;&amp;lt;
C++中的new、operator new与placement new
C++中的new、operator new与placement new
C++ 中 new 操作符内幕:new operator、operator new、placement new
一、new 操作符(new operator) 人们有时好像喜欢故意使C++语言的术语难以理解。比如说new操作符(new operator)和operator new的区别。 当你写这样的代码: string *ps = new string("Memory Management");你使用的new是new操作符。这个操作符就象sizeof一样是语言内置的,你不能改变它的含义,它的功能总
C++的new
Normal 0 7.8 pt 0 2 false false false MicrosoftInternetExplorer4 <!-- /* Font
C++中new与new[]的区别
C++中new与new[]的区别
9014



被折叠的 条评论
为什么被折叠?



