ror*_*yok 2 c# memory properties
这可能是一个noob问题,但无论如何我还是要问它.考虑以下两个类
public class Book{
public string Title;
public string Author;
public string ISBN;
public DateTime Published;
public string Description;
public string Genre;
public float Price
public int Pages;
public Book(){
}
}
public class BookStub{
public string Title;
public string Author;
public BookStub(){
}
}
Run Code Online (Sandbox Code Playgroud)
如果我按以下方式创建每个类的实例
Book a = new Book{
Title = "Do Androids Dream of Electric Sheep?",
Author = "Philip K. Dick"
};
BookStub b = new BookStub{
Title = "Do Androids Dream of Electric Sheep?",
Author = "Philip K. Dick"
};
Run Code Online (Sandbox Code Playgroud)
这两个实例都占用相同数量的内存吗?或者第一个占用更多?
所述的实例Book类将消耗比的情况下更多的内存BookStub,因为首先创建对象时用于所有成员变量所需的存储器被分配的类.
这是必要的,因为在任何时候你都可以写
a.Price = 12.74F;
Run Code Online (Sandbox Code Playgroud)
设置Price字段的值.如果尚未分配内存,则此代码将失败.
对于b类型的对象,这种失败是不可能的BookStub,因为它没有Price字段.编译器很容易检测到该错误.
因此,要明确地回答您的问题:是的,未分配的属性仍然会为每个类的实例消耗内存.它们只是自动初始化为默认值.
但请注意,这仅适用于对象的每个实例必须存在的成员变量.静态字段和所有类型的方法(实例或静态)都与类本身相关联,并且每次创建新实例时都不会消耗任何额外的内存.因此,您可以随意添加其他方法和静态字段,而无需担心增加内存占用.