当operator new()与引用类型一起使用时,实例的空间在堆上分配,引用变量本身放在堆栈上.除此之外,在堆上分配的引用类型实例中的所有内容都将被清零.
例如,这是一个类:
class Person
{
public int id;
public string name;
}
Run Code Online (Sandbox Code Playgroud)
在以下代码中:
class PersonDemo
{
static void Main()
{
Person p = new Person();
Console.WriteLine("id: {0} name: {1}", p.id, p.name);
}
}
Run Code Online (Sandbox Code Playgroud)
p变量在堆栈上,并且Person(所有它的成员)的创建实例都在堆上.p.id会是0 和p.name将会null.这将是这种情况,因为堆上分配的所有内容都已清零.
现在我感到困惑的是,如果我使用带new运算符的值类型.例如,考虑以下结构:
struct Date
{
public int year;
public int month;
public int day;
}
class DateDemo
{
static void Main()
{
Date someDate;
someDate= new Date();
Console.WriteLine("someDate is: {0}/{1}/{2}",
someDate.month, …Run Code Online (Sandbox Code Playgroud) 今天要了解一个新事物,我们可以使用new运算符创建整数,如下所示
int num = new int();
Run Code Online (Sandbox Code Playgroud)
现在我想知道我是否以这种方式创建一个整数,然后生成的整数将是值类型或引用类型?我想这将是一种价值类型.我尝试了下面的代码
int num1 = 10;
int num2 = new int();
int num3;
num1 = num2;
num2 = num3;
Run Code Online (Sandbox Code Playgroud)
我得到了以下构建错误:
使用未分配的局部变量'num3'
我知道为什么会出现这个构建错误.但我想知道何时以及如何使用new int()以及这究竟是如何工作的?有人可以对此有所了解吗?
感谢和问候 :)
下面这两个有什么区别?
int i =0;
int i = new int();
Run Code Online (Sandbox Code Playgroud)
在内存分配方面有什么区别吗?还有其他区别吗?
哪个C#语句等同于此:
int myInt = new int();
Run Code Online (Sandbox Code Playgroud)
我在http://smarterer.com上发现了这个问题.smarterer.com网站建议3个答案:
int myInt = NULL;int myInt;int myInt = 0;我知道第一个命题是不正确的.但是另外两个呢.我现在的问题是int myInt;和之间的区别是什么int myInt = 0;?对我来说也是如此.