当前位置: 首页 > 编程语言 > C#

c#中的语句是分配内存还是new运算符分配内存?分享

时间:2023-04-10 15:50:30 C#

c#中的声明分配内存或分配内存的新运算符?c#中的语句是否为要创建的变量分配内存,或者是分配内存并能够调用构造函数初始化内存中分配的变量的新运算符?据我了解,没有new运算符就不能调用任何类型的构造函数。我对吗?c#中的声明是否为要创建的变量分配内存,或者是分配内存并能够调用执行程序初始化内存中分配的变量的新运算符?首先,让我们确保你问的是你认为你在问的问题。对于值类型,变量存储位置和值存储位置是同一个存储。对于引用类型,与变量关联的存储位置包含对与对象关联的存储位置的引用。那些是完全不同的。其次,让我们澄清一下“变量”的“声明”是什么意思。静态字段、实例字段、局部变量和表单参数都有声明。此外,如果局部变量在lambda之外,局部变量和表单参数的赋值语义是不同的,而当局部变量在异步方法或迭代器块中时,语义是不同的。因此,让我们假设您有一个引用类型的局部变量,并且对局部变量没什么特别的:voidM(){Animalx=newGiraffe();...当方法M()被激活时,局部变量x的存储位置被分配用于短期存储-通常是堆栈或寄存器。评估“newGiraffe()”时,运行时会在长期存储(GC堆)上为Giraffe分配内存,然后将对该对象的引用传递给构造函数。当构造函数返回时,引用被分配给本地。所以有两个存储位置。x有一个短期位置,只为方法的激活而存在,还有长期存储引用的东西,直到垃圾收集器清理它。如果这不能回答您的问题,请澄清您的问题。你能在没有new运算符的情况下调用构造函数吗?我假设“构造函数”是指实例构造函数而不是静态构造函数。不是通过任何“正常”方式,不。在C#中没有为(object)null分配内存的规范声明...stringx;//x=null在内存中stringx="";//x=内存中有值的字符串。我的对象类型x;//x=null;MyObjectTypex=newMyObjectType();//x=内存中的MyObjectType。引用类型声明仅在使用new关键字创建对象之前为引用提供空间。值类型也是如此,所以如果你有:strings;//只有引用类型的内存,这是基于机器架构的。如果你有:strings="somestring";//引用(指针)+在堆上分配的内存。但是,对于值类型,它的内存几乎是一样的,它们的内存是在声明值类型时内联分配的。你是对的,你不能在任何类型上调用构造函数,除非实例化/创建该类型的对象。以上是C#学习教程:C#中的声明是分配内存还是new运算符分配内存?如果所有分享的内容对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: