2010-08-23 29 views

Trả lời

4

Tôi đặt ra câu hỏi ngược lại với bạn: tại sao không? Nếu không cho một số tổ tiên chung, làm thế nào bạn sẽ có một tham chiếu đến "một số đối tượng của bất kỳ loại"? Đôi khi điều đó là cần thiết. Thực sự, tuy nhiên, lớp System.Object không có một số phương pháp hữu ích mà nói chung là hữu ích cho bất kỳ loại:

  • Equals giúp thử nghiệm cho sự bình đẳng
  • GetHashCode giúp với hiệu suất trong bộ sưu tập
  • GetType - tất cả các đối tượng có một số loại
  • Finalize để hỗ trợ quyết toán CLR

Bởi vì những điều này là đồng mmon cho tất cả các loại, bạn có thể có mã (ngay cả trước khi generics) hoạt động thông minh trên nhiều loại.

Mặc dù vậy, trong C# 4.0, họ đã giới thiệu dynamic mà thực sự là một hệ thống phân cấp lớp của riêng nó. Nó bỏ qua kiểm tra kiểu tĩnh hoàn toàn và không nhất thiết xuất phát từ object. MSDN có một số good article về nó, và Chris Burrows' blog series cũng thú vị.

1

Nếu mọi thứ xuất phát từ một lớp, thì bạn có thể có các hành vi phổ biến - chẳng hạn như "is", "as", ToString() và GetHashCode(). Bạn có thể sử dụng các toán tử/phương thức này trên bất kỳ biến nào.

Bạn cũng có thể truyền bất cứ thứ gì chung chung như một 'đối tượng', đó là một cách đẹp hơn nhiều so với sử dụng con trỏ void.

+1

ngay cả trên hệ thống dotnet một số lớp xuất phát từ giao diện trống cho mục đích truyền trong khi hoạt động progeress – dankyy1

0

Nếu không có hành vi này:

  • Nó sẽ là hầu như không thể so sánh các đối tượng của các lớp học khác nhau bằng phương pháp() Equals.
  • Bạn sẽ không thể lưu trữ các phiên bản của lớp học của mình trong các bộ sưu tập tiêu chuẩn (không chung chung).
  • Bạn sẽ không thể dựa vào chuyển đổi ẩn thành loại Chuỗi.

Ngoài ra, nếu tôi không nhầm, toàn bộ mô hình quản lý bộ nhớ của .NET sẽ xoay quanh loại System.Object.

0

Trong thế giới được quản lý, bạn hy sinh việc sử dụng con trỏ, nhưng bạn có tham chiếu. Vì vậy, khi bạn không thể có một cái gì đó như thế này:

SomeClass obj = new SomeClass(); 
void* pObj = &obj; 

bạn có thể có điều này với nhiều loại tài liệu tham khảo (và các loại giá trị thông qua đấm bốc, nhưng sau đó không thực sự là điều tương tự) nhờ thừa kế:

object pObj = obj; 

Tất nhiên có những lợi ích khác, nhưng tôi đã chủ yếu nhìn thấy bằng cách sử dụng object như là một thay thế cho con trỏ void.

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