c#中的声明是分配内存还是分配内存的新运算符?
c#中的声明是为要创建的变量分配内存,还是分配内存的新运算符,并且能够调用构造函数来初始化内存中的已分配变量?
根据我的理解,如果没有new运算符,则无法调用任何类型的构造函数。 我对么?
c#中的声明是为要创建的变量分配内存还是分配内存的新运算符,并且能够调用指令器来初始化内存中的已分配变量?
首先,让我们确定你问的是你认为自己在问的问题。 对于值类型,变量存储位置和值存储位置是相同的存储 。 对于引用类型,与变量关联的存储位置包含对与该对象关联的存储位置的引用 。 那些是完全不同的。
其次,让我们通过“变量”的“声明”澄清你的意思。 静态字段,实例字段,局部变量和forms参数都具有声明。 此外,局部变量和forms参数的分配语义如果是lambda的封闭外部局部变量则是不同的,并且当本地处于异步方法或迭代器块时语义也不同。
因此,我们假设您有一个引用类型的局部变量,并且没有任何关于本地的幻想:
void M() { Animal x = new Giraffe(); ...
当方法M()被激活时,局部变量x的存储位置被分配给短期存储 – 通常是堆栈或寄存器。
当评估“new Giraffe()”时,运行时为长期存储(GC堆)上的Giraffe分配内存,然后将对该对象的引用传递给构造函数。 当构造函数返回时,引用将分配给本地。
所以有两个存储位置。 有x的短期位置,只有方法的激活才会存在,并且存在所引用的东西的长期存储,并且直到垃圾收集器清理它为止。
如果这不能回答您的问题,请澄清您的问题。
你可以在没有new运算符的情况下调用构造函数吗?
我假设“构造函数”是指实例构造函数而不是静态构造函数。
不是通过任何“正常”手段,不是。
没有规范的声明在C#中为(object)null分配内存…
string x; // x = null in memory string x = ""; // x = string in memory with value. MyObjectType x; // x = null; MyObjectType x = new MyObjectType(); // x = MyObjectType in memory.
在使用new关键字创建对象之前,引用类型声明仅为引用提供空间。 同样适用于值类型
所以如果你有:
string s; // only reference type memory, which is based on the machine architecture.
如果你有:
string s = "some string"; // reference (pointer) + memory allocated on the heap.
但是,对于Value类型,它的内存几乎相同,它们的内存是在声明值类型的内联中分配的。
而且你是对的,你不能在任何类型上调用构造函数,除非实例化/创建了类型的对象。
上述就是C#学习教程:c#中的声明是分配内存还是分配内存的新运算符?分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/1038984.html