2

这可能是一个菜鸟问题,但无论如何我都需要问它。考虑以下两个类

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

这两个实例是否占用相同数量的内存?还是第一个占用更多?

4

2 回答 2

5

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

这是必要的,因为您可以随时编写

a.Price = 12.74F;

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

b对于type的对象,这种失败是不可能的BookStub,因为它没有Price字段。编译器很容易检测到该错误。

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

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

于 2013-05-09T08:36:54.587 回答
1

Book将比BookStub. 您不分配给属性并不重要;它们仍然被初始化为其类型的适当默认值,并且这些值必须存储在某个地方。

于 2013-05-09T08:40:10.107 回答