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

C# 未分配的属性会占用类中的内存吗?,c#,memory,properties,C#,Memory,Properties,这可能是一个有点愚蠢的问题,但我还是要问它。考虑下面两个类 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 P

这可能是一个有点愚蠢的问题,但我还是要问它。考虑下面两个类

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

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

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

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

a.Price = 12.74F;
设置
价格
字段的值。如果没有分配内存,此代码将失败

对于
BookStub
类型的对象
b
,不可能出现这种故障,因为它没有
Price
字段。编译器很容易检测到这个错误

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


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

Book
将比
BookStub
消耗更多内存。不指定属性并不重要;它们仍然会被初始化为相应类型的默认值,并且这些值必须存储在某个地方