2013-05-09 54 views
2

這可能是一個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" 
}; 

難道這兩種情況下佔用的內存量相同創建的每個類的實例?還是第一個佔用更多?

回答

5

Book類的實例將消耗比BookStub類的實例更多的內存,因爲所有成員變量所需的內存都是在首次創建對象時分配的。

這是必要的,因爲在任何時候,你可以寫

a.Price = 12.74F; 

設置Price字段的值。如果內存尚未分配,則此代碼將失敗。

對於BookStub類型的對象b,此類故障是不可能的,因爲它沒有Price字段。編譯器很容易檢測到這個錯誤。

因此,要明確回答您的問題:是的,未分配的屬性仍然消耗類的每個實例的內存。他們只是自動初始化爲默認值。

但是,請注意,這只是對於每個對象實例必須存在的成員變量的情況。靜態字段和所有類型的方法(實例或靜態)都與類本身相關聯,並且每次創建新實例時都不會消耗任何額外的內存。因此,請隨時添加其他方法和靜態字段,而不用擔心增加內存佔用量。

1

Book會比BookStub消耗更多的內存。不要緊,你不分配給屬性;它們仍然被初始化爲適合它們類型的默認值,並且這些值必須存儲在某個地方。