2011-12-13 21 views
7

Tôi có đúng khi tin rằng bất kỳ đối tượng nào không kế thừa từ System.ValueType do đó phải là một kiểu tham chiếu?Có phải tất cả các đối tượng không được kế thừa từ kiểu tham chiếu System.ValueType không?

Tôi không thể tìm thấy bất kỳ tài liệu thuyết phục nào để sao lưu khái niệm này.

+2

xem tại đây: http: // stackoverflow.com/questions/3503568/system-valuetype-understanding –

+2

Con trỏ không phải là. Tuy nhiên, không thể gọi chúng là một đối tượng. –

+1

@ HansPassant Bạn có thể cố tình nguyền rủa và nói rằng chúng là các đối tượng theo nghĩa khác của từ (chúng được gọi là các đối tượng trong C chẳng hạn). Tuy nhiên, bạn phải thực sự thận trọng để nói rằng, chúng không phải là ý nghĩa của "đối tượng" trong thế giới .NET. –

Trả lời

6

Kiểm tra xem this có giúp ích không.

enter image description here

+2

'System.ValueType' cũng được thừa kế từ' System.Object'. Vì vậy, theo logic này, tất cả các loại giá trị là các kiểu tham chiếu. –

+0

(Nhận xét trên không còn giá trị sau khi AkharRoop chỉnh sửa để bao gồm hình ảnh.) –

1

Nếu bạn đọc kỹ các Remarks bạn sẽ thấy rằng

Các kiểu dữ liệu được tách ra thành các loại giá trị và kiểu tham chiếu. Giá trị các loại được phân bổ theo từng cấp hoặc được phân bổ nội dòng trong cấu trúc. Các loại tham chiếu được phân bổ theo cấp độ heap. Cả hai loại tham chiếu và giá trị là bắt nguồn từ đối tượng lớp cơ sở cuối cùng. Trong trường hợp nó là cần thiết cho loại giá trị hoạt động như đối tượng, trình bao bọc làm cho kiểu giá trị giống như đối tượng tham chiếu được phân bổ trên đống và giá trị của loại giá trị được sao chép vào đó. Trình bao bọc là được đánh dấu để hệ thống biết rằng nó có chứa một loại giá trị. Quá trình này được gọi là boxing, và quá trình ngược lại được gọi là unboxing. Quyền anh và unboxing cho phép bất kỳ loại nào được coi là đối tượng.

biên dịch C# làm một công việc tuyệt vời làm cho bạn nghĩ rằng các loại giá trị như intlong có phương pháp

+9

Họ có phương pháp. Nó không phải là ảo giác. –

+0

@Eric mặc dù trình biên dịch thực hiện một công việc đáng yêu để giúp jitter gọi chúng hiệu quả thay mặt chúng tôi nhờ vào mã opcode bị hạn chế;) – ShuggyCoUk

+0

@Eric Lippert: Nếu tôi có cấu trúc (ví dụ: 'System.Collections.Generic.List'1 + Enumerator [System.Int32] ') và gọi một phương thức trên một thể hiện đóng hộp (ví dụ: IEnumerable ' .MoveNext()), hệ thống có gọi trực tiếp phương thức giống như tôi gọi phương thức trên cấu trúc hay không gọi cái gì khác? Nó dường như không unbox ví dụ, kể từ khi đột biến được thực hiện bởi các chức năng ảnh hưởng đến trường hợp đóng hộp. Giải thích của tôi về hành vi này là có một hàm bao hàm gọi hàm được yêu cầu trên đối tượng được đóng hộp. Đó có phải là cách mọi thứ hoạt động không? – supercat

0

nếu bạn đang ở QI và Stephen Fry đang làm điều bình thường của mình là những gì một thằng ngốc ấn tượng rằng một người thông minh giống như vậy, sau đó anh ta đã phản ứng lại "bất kỳ đối tượng nào không kế thừa từ System.ValueType do đó phải là một kiểu tham chiếu" với klaxon và màn hình nhấp nháy cho biết "tất cả các đối tượng là loại giá trị hoặc loại tham chiếu".

Sau đó, ông sẽ chỉ ra rằng ban đầu trong khoa học máy tính, đối tượng có nghĩa là bất kỳ thực thể nào có thể được điều khiển bởi máy tính, và do đó bao gồm con trỏ. phù hợp với định nghĩa sau của đối tượng (từ sau này cho biết với một giọng nhấn mạnh nhất định) đề cập đến các đối tượng được đóng gói với phương pháp của chúng và do đó bạn đã sai. Alan Davies sẽ chỉ ra rằng mọi người đều hiểu ý của bạn, nhưng đã quá trễ, tuyên bố của bạn sẽ chỉ phục vụ cho việc đốt cháy sự ấm áp của Fry, đặc biệt là vì công nghệ có lẽ chỉ đứng sau Oscar Wilde trong hàng ngũ về những điều anh ấy thích nghĩ rằng anh ấy có thể nói một cách thông minh (và có lẽ là không ai trong hàng ngũ thứ anh ta chẳng biết gì cả, bây giờ tôi nghĩ về nó, không đời nào anh ta nói được điều đó và không hiểu sai một số cách).

Nói cách khác có, bạn là hoàn toàn đúng :)

(Xin lỗi cho những ai chưa xem nhiều kênh truyền hình Anh, và do đó không có một đầu mối những gì bất kỳ điều đó có nghĩa).

+0

Tôi có xu hướng chuyển sang khi QI đến ;-) –

+0

Lựa chọn khôn ngoan. Thật không may con tôi thường không, vì vậy tôi chỉ ra những sai lầm và câu trả lời "đúng" chỉ đơn giản là chơi với ngữ nghĩa. –