C#编程中New关键字的多种用途:修饰符、运算符与约束

[id_225051078]

C#编程中New关键字的多种用途:修饰符、运算符与约束

(1)new修饰符用于隐藏基类成员的继承成员。

(2)new运算符用于创建对象和调用构造函数。

new 约束的作用是在泛型声明中,对那些可能被用作类型参数的参数的类型进行约束。

【new修饰符】

显式隐藏从基类继承的成员需使用 new 修饰符。若要达成隐藏继承成员的目的,需在派生类中使用相同名称声明该成员,并以 new 修饰符对其进行修饰。

请看下面的类:

1publicclassMyClass

3{

5publicintx;

7publicvoidInvoke(){}

9}

10

在派生类中用“Invoke”这个名称来声明成员的话,就会将基类中的“Invoke”方法给隐藏起来。

public class MyDerivedC 是从 MyClass 派生出来的类。它继承了 MyClass 的属性和方法,并可以在此基础上进行扩展和修改。在 MyDerivedC 中,可以定义自己的成员变量和成员函数,以满足特定的需求。通过继承,MyDerivedC 可以复用 MyClass 中已经实现的功能,同时又可以添加新的功能,提高代码的复用性和可维护性。

3{

5newpublicvoidInvoke(){}

7}

但是,因为字段x不是通过类似名隐藏的,所以不会影响该字段。

【new运算符】

1.用于创建对象和调用构造函数

创建了一个名为 Class_Test 的类的实例,即 new Class_Test()。

2.也用于为值类型调用默认的构造函数

例:intmyInt=newint();

myInt 被初始化为 0,0 是 int 类型的默认值。此语句的效果与 int myInt = 0; 是一样的。

3.不能重载new运算符。

如果 new 运算符在分配内存时失败,那么它就会引发 OutOfMemoryException 异常。

通过继承隐藏名称采用下列形式之一:

引入类或结构中的方法会隐藏基类中具有相同名称的属性、字段和类型,并且也会隐藏具有相同签名的所有基类方法。

引入类或结构中的索引器时,会隐藏所有基类中具有相同名称的索引器。

3.在同一成员上同时使用new和override是错误的。

引入类或结构时,其中的常数、指定、属性或类型会隐藏所有具有相同名称的基类成员。

注意:在不隐藏继承成员的声明中使用new修饰符将生成警告。

关于C++中new的用法的问题

我在书上看到:当用 new 运算符去定义一个多维数组变量或者数组对象的时候,它会产生一个指向数组第一个元素的指针,并且返回的类型会保持除了最左边维数之外的所有维数。

是什么意思?

如果可以的话,请多举几个例子看看,大家帮帮忙,谢谢了

回答:

"它产生一个指向数组第一个元素的指针",这个好理解吧,

就是说他返回的指针是指向数组中的第一个元素的.

比如

int*p1=newint[10];

int(*p2)[10]=newint[2][10];

p1是指向p1[0]的.

p2是指向p2[0][0]的.

"返回的类型保持了除最左边维数外的所有维数"

我理解它的意思是:返回的类型实际上是一种东西的指针,这种东西除了最左边那一维外是另一种类型,因为最左边那一维被换成了指针。

我说得也不清楚,看例子吧.

这个被新建的是一维的,最左边的那一维被替换了,所以就只剩下 int 了,返回的是一个指向 int 的指针 int*。

int*p1=newint[10];

这个二维被 new 出来后,把最左那一维[2]去掉了,就剩下了 int[10],因此返回的是一个指向 int[10]这种一维数组的指针 int(*)[10]。

int(*p2)[10]=newint[2][10];

创建了一个三维数组,去掉最左边那一维[5]后,剩下 int[2][10],所以返回的是一个指向二维数组 int[2][10]这种类型的指针 int(*)[2][10]。

定义一个指向二维数组的指针 p3,该二维数组的每个元素又是一个包含 10 个整数的一维数组。通过 new 操作符动态分配了一个大小为 5 行 2 列 10 个元素的二维数组,并将其地址赋值给 p3。

这个是很新的东西,它去掉了最左边的[3],并且还有 int[5][2][10],所以返回的是一种指向 int[5][2][10]这种三维数组的指针 int(*)[5][2][10]。

定义一个指针 p4,它指向一个包含 3 个元素的数组,每个元素又是一个包含 5 个元素的数组,每个元素又是一个包含 2 个元素的数组,每个元素又是一个包含 10 个整数的数组。然后使用 new 运算符在堆上分配了一个大小为 3×5×2×10 的整数数组,并将其地址赋值给 p4。

上面为什么会写成 int(p2*)[10] 这种奇怪的样子,而不是 intp2*[10] 呢?这是因为前者是我们所需要的指向数组的指针,而后者是一个指针的数组。

new有几种用法的详细解释.

new有几种用法

答:第一种:newClass();

第二种:覆盖方法

publicnewXXXX(){}

new 约束规定在泛型类声明中,任何类型参数都必须具备公共的无参数构造函数。

大师们,这几种说的那么笼统,能不能详细的再用例子解释一下呢

问题补充:

直接不=new

用的时候new类.方法也算第一种吧.

最佳答案

你看看new的一些相关知识,具体的例子吗,你再研究下了

在C#中,new关键字可用作运算符、修饰符或约束。

new运算符

用于创建对象和调用构造函数。

new修饰符

用于向基类成员隐藏继承成员。

new约束

用于在泛型声明中约束可能用作类型参数的参数的类型。

new修饰符(C#参考)

当用作修饰符时,new 关键字能够显式地将从基类继承的成员隐藏起来。这意味着该成员的派生版本将会替代基类版本。如果不使用 new 修饰符而隐藏成员,这种情况是被允许的,但会产生警告。而使用 new 显式地隐藏成员,就会取消这个警告,并且会记录下用派生版本来替代的这一事实。

要隐藏继承的成员的话,需在派生类中用相同名称来声明该成员,并且要用 new 修饰符对该成员进行修饰

new运算符(C#参考)

用于创建对象和调用构造函数。例如:

Class1o=newClass1();

new约束(C#参考)

new 约束规定了在泛型类声明中,任何类型参数都必须具备公共的无参数构造函数。当泛型类要创建某个类型的新实例时,就会将这个约束应用于类型参数,以下面的示例可以看出这种情况。

classItemFactorywhereT:new()

publicTGetNewItem()

returnnewT();

C#中的new关键字的用法

new 作为运算符时存在两种用法,分别是创建对象以及调用构造函数。例如:C#中的 new 关键字可用作运算符、修饰符或约束,其中 new 作运算符时,有创建对象和调用构造函数这两种用法。也可用于调用值类型的默认构造函数:int i = new int(); 上一句等同于 int i = 0;因为 0 是 int 类型的默认值。不能为结构声明默认的构造函数,因为每一个值类型都自带一个隐式的默认公共构造函数。可以在结构类型上声明参数化构造函数来设置其初始值,不过只有在需要默认值之外的值时才必须这样做。值类型对象(如结构)在堆栈上创建,而引用类型(如类)在堆上创建。值类型的对象在超出范围时会被销毁。引用类型的对象则是在该对象的最后一个引用被移除之后的某个不确定时间被销毁。new 可作为修饰符使用。new 关键字能够显示隐藏从基类继承的成员。

隐藏继承的成员时,派生类版本会替换基类版本。若不使用 new 关键字隐藏成员,就会产生警告。而使用 new 关键字后,能够消除该警告,同时会记录要替换成派生版本这一事实。1. 引入类或结构中的常数、指定、属性或类型,能隐藏具有相同名称的所有基类成员。引入类或结构中的方法会隐藏基类中同名的属性、字段和类型,同时也会隐藏所有基类中具有相同签名的方法。引入类或结构中的索引器会隐藏所有基类中具有相同签名的索引器。不能对一个成员同时使用 new 和 override 。因为 new 修饰符和 override 修饰符含义是互斥的。new 修饰符会用相同的名称创建一个新成员,并且会隐藏原始成员。

若使用 new 约束,该类型就不能是抽象类型。当创建泛型类的新实例时,会将 new 约束应用于类型参数,例如:类 ItemFactory 中,有 where T :new() 的约束;在该类的 GetNewItem 方法中,可通过 return new T(); 创建新实例。当 new()约束与其他约束一起使用时,必须最后指定,如在 public class ItemFactory2 中,有 where T :IComparable,new() 的约束。

C++ new用法的正确方法应该如何操作?

在这篇文章里,我们会针对它的两种不同含义,分别来介绍它的影音方法。

希望能给大家带来一些帮助。

C++ 编程语言中有一

有一种被称作 new 的术语。然而,这一概念较为模糊,有些人将其理解为 new 函。

数,有的人会将其理解为 new 运算符。那么它的真正含义究竟是怎样的呢?

在这里,我们将通过介绍 C++ new 的用法,来帮助大家一起进行分析。

*C++ new用法之一 new运算符*

最常用的是作为运算符的new,比如:

创建了一个名为 str 的字符串对象,该对象被初始化为“test new”。

new 作为运算符,就如同 sizeof 一样,是 C++ 内置的。并且,你无法对它进行任何的改变。

除了使用它。

new会在堆上分配一块内存,并会自动调用类的构造函数。

*C++ new用法之二 new函数*

第二种是 new 函数,实际上在 new 运算符内部进行内存分配所使用的就是 new 函数。

型是:

这是一个用于分配指定大小内存空间的函数,它返回一个指向所分配内存的指针,该指针的类型为 void*,参数 size 表示要分配的内存大小。

new 函数所返回的是一个 void 指针,它指向的是一块未经过初始化的内存。就像你所看到的那样,这与 C 语言的相关情况类似。

语言的 malloc 行为较为相似,你能够重载 new 函数,同时还可以增加一些额外的参数,不过

第一个参数必须是 size_t 类型,此类型指明了分配内存块的大小。

一般情况下这是不必要的,但允许你这么做。如果重载了 new 函数,在使用时……

用new操作符时调用的就是你重载后的new函数了。

如果使用 new 函数,与之相对的是语句 string *str = new string("test new")。

代码大概是如下的样子:

使用 operator new 分配了 sizeof(string) 大小的内存空间,并将其强制转换为 string* 类型,赋值给了 string* 类型的变量 str 。

2. str.string(“test new”);

当然,这种调用是非法的。然而,编译器不存在这样的限制。

这还不算完,还有第三种的new存在。

*C++ new用法之三 placement new*

第三种是 placement new,它也是 new 作为函数的一种用法,能够让你在一块特定的内存区域上构造对象。

在已存在的内存上分配一个对象,并且该内存上的数据不会被覆盖,也不会被你主动进行更改。

写,placement new 也是由 new 操作符来进行调用的,其调用的格式为:

创建一个新的 (缓冲区) 类型,其大小为 size_t 类型的 size ;

先看看下面的代码:

1. char str[22];

2. int data = 123;

3. int *pa = new (&data) int;

创建一个指向整数类型的指针 pb ,通过指定的内存区域 str 来分配内存,并在该内存区域中初始化一个整数值为 9 。

结果 pa 为 123 且未覆盖原数据,而 pb 为 9 并覆盖了原数据,由此可以看出

placement new 不会分配新的内存,它可以被用于在栈上分配的内存,并且不会……

限于堆。

为了使用placement new 你必须包含或者

其实 placement new 与第二种情况是相同的,只是它多了一些参数,它是函数 new 的一种重载形式。

法格式为:

定义了一个名为 operator new 的函数,它接受一个 size_t 类型的参数和一个 void* 类型的 buffer 参数,并且返回一个 void* 类型的指针。

它看起来可能是这个样子:

函数“operator new”带有两个参数,一个是“size_t”类型的大小,另一个是“void*”类型的缓冲区“buffer”,该函数的返回值是“buffer”。

new 对应的是 delete,需要回收内存,不然就会泄漏,这个下次再说。

写吧,回忆一下今天的内容先。

*总结*

1. 函数new

在堆上分配一块内存的是 void *operator new(size_t size);它还与 placement 相关。

new(用于分配指定大小内存空间的函数,其参数为 size_t 类型,表示要分配的内存大小,另一个参数为 void* 类型的 buffer,表示已存在的缓冲区);在一个已经存在的

在内存上创建对象时,如果已经拥有一块内存,那么 placement new 会非常有用。它可以在指定的内存位置创建对象,而无需进行动态内存分配。这种方式在需要在特定的内存区域创建对象时非常方便,例如在嵌入式系统或性能敏感的应用中。

实上,它STL中有着广泛的使用。

2. 运算符new

最常用的new,没什么可说的。

函数 new 不会自动去调用类的构造函数,原因是它对于所分配的内存类型一无所知。

知;而运算符new会自动调用类的构造函数。

4. 函数new允许重载,而运算符new不能被重载。

5. 紧接着就是对应的delete。

你可能想看:
« 上一篇
下一篇 »

相关推荐

FreeBasic:强大免费开源的64位basic编译器及应用优势

2025年05月10日

82阅读

脊柱侧弯矫正方法大盘点:运动康复、支具矫正等多种方式

2025年05月09日

85阅读

如何在winForm标题栏去掉标题文字且任务栏图标正常显示

2025年05月09日

85阅读

十一黄金周促销广告词大全,国庆购物狂欢等你来

2025年05月09日

77阅读

关闭快速编辑模式及插入模式,设置控制台指定文字颜色举例

2025年05月09日

63阅读

黄金搭档低糖高钙饮品包装及成分功效全解析,适合人群要知晓

2025年05月09日

91阅读