2015-01-03 13 views
6

Để được rõ ràng hơn về câu hỏi của tôi, nếu bạn tạo một mảng của một lớp học đặc biệt: ví dụ,Các phương pháp dụ có được sao chép trong bộ nhớ cho từng đối tượng không?

ExampleClass[] test = new ExampleClass[5]; 

Tôi biết lăm ExampleClass trường sẽ tạo ra một bản sao của mỗi biến cho mỗi lớp học, nhưng là phương pháp/chức năng nhân bản 5 lần trong bộ nhớ, hoặc làm mỗi bài kiểm tra chỉ trỏ đến cùng một lớp đơn codebase? Nếu nó trùng lặp cho mỗi lớp, đó sẽ chỉ là một sự lãng phí bộ nhớ.

+1

Ông có thể xin vui lòng gửi mã mà trông có đúng không? 'ExampleClass test = new test [5]' trông rất lạ. –

+3

Phân bổ một mảng không phân bổ các cá thể lớp. Dù sử dụng mảng hay không, nhiều phiên bản của một lớp đều sử dụng cùng một mã thực thi và các thành viên dữ liệu tĩnh; chỉ các thành viên dữ liệu _instance_ (tức là các trường) mới được cung cấp các bản sao mới cho mỗi cá thể của lớp. Nếu bạn muốn có một câu trả lời cụ thể hơn, hãy viết một ví dụ mã C# hợp lệ và giải thích chính xác những gì bạn muốn biết. Như bây giờ, rất khó để hiểu chắc bạn đang hỏi gì. –

Trả lời

8

Mỗi loại được nạp vào một AppDomain sẽ có một Phương pháp cấu trúc Bảng chứa tất cả các phương pháp mà gõ định nghĩa, cộng với phương pháp ảo bắt nguồn từ cha mẹ (thường Object) và các phương pháp xác định bởi bất kỳ giao diện thực hiện.

Bảng phương pháp này được chỉ bởi mỗi trường hợp của đối tượng đó. Vì vậy, mỗi trường hợp không trùng lặp tất cả các phương thức được xác định theo loại đó, nhưng trỏ đến cấu trúc bảng phương thức này với tham chiếu.

Ví dụ:

public class MyClass : IDisposable 
{ 
     private static void MyStaticMethod() 
     { 
      // .... 
     } 
     public void MyInstanceMethod() 
     { 
      // .... 
     } 
     public void Dispose() 
     { 
      throw new NotImplementedException(); 
     } 
} 

MyClass này sẽ có một bảng phương pháp bao gồm:

  • MyStaticMethod
  • MyInstanceMethod
  • Vứt
  • Và khác phương pháp ảo bắt nguồn từ System.Object

Hãy nhìn vào sơ đồ tốt đẹp của bảng phương pháp:

Method Table Diagram

Bạn có thể kiểm tra toàn bộ bài viết về bảng phương pháp here

+0

Bảng phương pháp này có bao giờ được giải phóng khỏi bộ nhớ không? ví dụ. nếu bộ thu gom rác đã làm sạch tất cả các trường hợp của một loại nhất định - thì bảng phương thức của loại đó vẫn còn dính trong bộ nhớ? – BornToCode

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