未分配的属性会占用类中的内存吗?

时间:2013-05-09 08:31:32

标签: 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(){
    }        
}

如果我按以下方式创建每个类的实例

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" 
};

这两个实例都占用相同数量的内存吗?或者第一个占用更多?

2 个答案:

答案 0 :(得分:5)

Book类的实例将比BookStub类的实例消耗更多内存,因为在首次创建对象时会分配所有成员变量所需的内存。

这是必要的,因为在任何时候你都可以写

a.Price = 12.74F;

设置Price字段的值。如果尚未分配内存,则此代码将失败。

b类型的对象BookStub无法进行此类失败,因为它没有Price字段。编译器很容易检测到该错误。

因此,要明确回答您的问题:是的,未分配的属性仍会为每个类的实例消耗内存。它们只是自动初始化为默认值。

但请注意,这仅适用于对象的每个实例必须存在的成员变量。静态字段和所有类型的方法(实例或静态)都与类本身相关联,并且每次创建新实例时都不会消耗任何额外的内存。因此,您可以随意添加其他方法和静态字段,而无需担心增加内存占用。

答案 1 :(得分:1)

Book将消耗比BookStub更多的内存。您没有分配属性并不重要;它们仍然被初始化为其类型的适当默认值,并且这些值必须存储在某处。