2012-06-23 29 views
5

Một lớp được tạo thành bình thường của các biến thành viên & phương pháp. Khi chúng ta tạo một thể hiện của một lớp, bộ nhớ được cấp phát cho các biến thành viên của một lớp. Liệu các phương pháp thành viên cũng chiếm bộ nhớ? Các phương pháp này được lưu trữ ở đâu?Thành viên lớp học có chiếm được bộ nhớ không?

+5

Phương pháp triển khai phương pháp mất bộ nhớ trên mỗi Loại (và tôi nghĩ mỗi lần sàng lọc bằng generics?) Nhưng điều này không * tăng * trên mỗi đối tượng đối tượng. Ví dụ. 'obj.GetType()' trả về kiểu mà đại diện cho các phương thức đã nói (và một loạt các thứ khác). Các biến (ví dụ) * là mỗi trường hợp, tất nhiên. –

+0

@pst, tại sao đăng câu trả lời hay như nhận xét? –

+0

@AlexeiLevenkov làm cho một điểm tốt. Tôi chắc chắn sẽ bỏ phiếu và tôi tự trả lời câu hỏi này với những gì tôi cho là một câu trả lời khá tốt. –

Trả lời

3

Giả sử chúng ta có lớp sau đây:

public class Person 
{ 
    public string Name { get; set; } 

    public Person(string name) 
    { 
     Name = name; 
    } 

    public string SayName() 
    { 
     string hello = "Hello! My name is "; 
     return hello + name; 
    } 
} 

Person p = new Person("John"); 
string yourName = p.SayName(); 

Chức năng SayName() đi trên Call Stack, và đối tượng Person p và đó là tài sản (Name) sẽ ở lại trong bộ nhớ cho đến khi Garbage Collection đi vào và làm sạch nó lên.

Về mặt bộ nhớ, bạn nên quan tâm hơn đến các trường mẫu (thuộc tính) của đối tượng, lượng đối tượng bạn đang xử lý và đối tượng của bạn là Reader hoặc Connection. Nếu đối tượng của bạn là Reader hoặc Connection, bạn cần xem xét tuyên bố using.

Pseudo-code:

using(DatabaseConnection dbConn = new DatabaseConnection() 
{ 
    // Process your calls and data 
} 
// The object is Disposable and it's resources are cleared 
+0

"Các biến bên trong SayName(), sẽ là hello, chỉ ở lại trong bộ nhớ trong khi chức năng là trong phạm vi. Vì vậy, một khi chức năng hoàn thành, biến không còn trong bộ nhớ. " Không hoàn toàn đúng, GC có thể thu thập chúng ngay khi tham chiếu không còn cần thiết nữa (và điều này bao gồm 'this'!) – porges

+0

Có. Điều này đúng. Tôi đoán tôi nên làm cho nó rõ ràng hơn về mặt truy cập. –

+2

"một số thời gian [sic] của' Reader' hoặc 'Kết nối'" - chỉ đơn giản là tổng quát thành 'IDisposable' có thể rõ ràng hơn, IMO –

0

Lớp chỉ là một bản in màu xanh, Nó không chiếm bất kỳ không gian càng lâu càng biến kiểu lớp đã không được định nghĩa. Khi đối tượng/thể hiện của lớp loại được xác định, thành viên lớp sẽ chiếm một số không gian trong bộ nhớ. Và kích thước của cá thể bằng với tổng kích thước của các thành viên xác định trong lớp.

Các vấn đề liên quan