Tại sao mỗi lớp trong .Net xuất phát từ System.Object? những lợi ích là gì?Tại sao mỗi lớp trong .Net xuất phát từ System.Object? những lợi ích là gì?
Trả lời
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 đẳngGetHashCode
giúp với hiệu suất trong bộ sưu tậpGetType
- tất cả các đối tượng có một số loạiFinalize
để 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ị.
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.
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
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.
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.
- 1. Những lợi ích chính khi tham gia WPF là gì?
- 2. Tại sao C# và VB có Generics? Họ cung cấp những lợi ích gì? Generics, FTW
- 3. Lợi ích của JCA là gì?
- 4. Lợi ích của letrec là gì?
- 5. Macro lớn C. Lợi ích là gì?
- 6. Những lợi thế khi sử dụng Qt là gì?
- 7. Lợi ích của Scala là gì?
- 8. Các loại giá trị kế thừa từ System.Object ... tại sao?
- 9. Lợi ích thực tế của ADO.NET Entity Framework là gì?
- 10. Tại sao MVVM và lợi ích cốt lõi của nó là gì?
- 11. Lợi ích của việc sử dụng Lớp học trong VBA là gì?
- 12. Lợi ích của việc sử dụng Scala trong .Net là gì?
- 13. Lợi ích của \ n và PHP_EOL trong PHP là gì?
- 14. Tôi có thể lấy những lợi ích gì từ đối tượng userToken của SmtpClient.SendAsync?
- 15. Tại sao những từ này được coi là từ dừng?
- 16. Lợi ích của việc sử dụng tính năng xuất bản Visual Studio trong ASP.NET là gì?
- 17. Lợi ích của Mô-đun Mô-đun Javascript là gì?
- 18. Lợi ích của Tài nguyên Javascript trong Eclipse là gì?
- 19. Cố gắng tự tin vào những lợi ích của TDD
- 20. ReverseHTTP là gì và tại sao nó lại hữu ích?
- 21. Là HttpContextWrapper tất cả những gì .... hữu ích?
- 22. Lợi ích/lợi thế của việc sử dụng Python 3 là gì?
- 23. Lợi ích của tệp tài nguyên (.resx) là gì?
- 24. Lợi ích của Windows 7 đối với các nhà phát triển phần mềm là gì?
- 25. Nguồn Hadoop MR: HDFS vs HBase. Lợi ích của mỗi?
- 26. Visual Studio 2005 vs 2008 - Lợi ích là gì?
- 27. Lợi ích của định nghĩa hàm tạo này là gì
- 28. Razor/CSHTML - Bất kỳ lợi ích nào so với những gì chúng tôi có?
- 29. Lợi ích của tập tin xử lý ASHX trong asp.net là gì?
- 30. Lợi ích của việc sử dụng WPF trên Windows Forms là gì?
Cần thiết để làm cho bộ thu gom rác hoạt động. –