Dlaczego każda klasa w .Net pochodzi z System.Object? jakie są korzyści?Dlaczego każda klasa w .Net pochodzi z System.Object? jakie są korzyści?
Odpowiedz
Stawiam przeciwne pytanie: dlaczego nie? Gdyby nie jakiś wspólny przodek, jak byś miał odniesienie do "jakiegoś obiektu dowolnego typu"? Czasami to jest potrzebne. Naprawdę, chociaż klasa System.Object
ma kilka przydatnych metod, które są na ogół przydatne dla każdego typu:
Equals
pomaga test równościGetHashCode
pomaga wydajności w kolekcjachGetType
- wszystkie obiekty mają jakiś rodzajFinalize
wspierać CLR finalizacji
Ponieważ te rzeczy są wspólnie mmon dla wszystkich typów, możesz mieć kod (nawet przed rodzajami generycznymi), który inteligentnie działa na wielu typach.
Mimo to, w C# 4.0, wprowadzono dynamic
, która jest naprawdę własną hierarchią klasową. Pomija on statyczne sprawdzanie typu i niekoniecznie pochodzi z object
. MSDN ma na ten temat numer good article, a także interesująca jest Chris Burrows' blog series.
Jeśli wszystko pochodzi od jednej klasy, wtedy możesz mieć zachowania uniwersalne - takie jak "jest", "jak", ToString() i GetHashCode(). Możesz użyć tych operatorów/metod na dowolnej zmiennej.
Można również przekazać coś ogólnie jako "obiekt", co jest o wiele ładniejszym sposobem niż używanie wskaźników pustych.
nawet w systemie dotnetowym niektóre klasy wywodzą się z pustych interfejsów do celów rzutowych podczas operacji progeekcyjnych – dankyy1
Bez tego zachowania:
- Byłoby prawie niemożliwe, aby porównać obiektów różnych klas stosując metodę equals().
- Nie można przechowywać instancji klasy w standardowych (nie generycznych) kolekcjach.
- Nie można polegać na niejawnej konwersji typu String.
Ponadto, jeśli się nie mylę, cały model zarządzania pamięcią .NET obraca się wokół typu System.Object.
W zarządzanym świecie poświęcasz używanie wskaźników, ale masz odniesienia. Tak więc, nie można mieć coś takiego:
SomeClass obj = new SomeClass();
void* pObj = &obj;
można mieć to dla typów referencyjnych (i typów wartości poprzez boks, ale to naprawdę nie to samo) za sprawą spadków:
object pObj = obj;
Oczywiście są inne korzyści, ale głównie widziałem, używając object
jako zamiennika dla wskaźników void.
- 1. Jakie są korzyści z curry?
- 2. Kolekcja dziedzicząca z ObservableCollection - Jakie są korzyści?
- 3. Jakie są korzyści dla klienta Aktualizacja systemu z .NET 2 do .NET 3.5 lub 4
- 4. Jakie są korzyści z definiowania funkcji w python?
- 5. Jakie są korzyści z niejawny wpisywanie w C# 3.0> +
- 6. Dlaczego potrzebujemy, jakie korzyści wykorzystać mangusta
- 7. Jakie są korzyści z definiowania metod Go poza definicjami struct?
- 8. Jakie korzyści daje Class.new w tym Rspecu
- 9. Jakie korzyści daje użycie ApplicationContext?
- 10. Korzyści z asertywnego programowania
- 11. Jakie korzyści wynikają z korzystania z progresywnych aplikacji internetowych (PWA)?
- 12. Jakie są wady korzystania z wdrożenia ClickOnce w .Net?
- 13. C++ odniesienia klasa bazowa zainicjować z innej klasy pochodzi obiektu
- 14. Znany typ WCF z System.Object w Config
- 15. Jakie są zalety korzystania z Qt?
- 16. Przenośna biblioteka klas System.Object error
- 17. Jakie są korzyści z usuwania nadmiarowych importu w VB.NET lub C# za pomocą pliku
- 18. Jakie są różnice między ConcurrentQueue i BlockingCollection w .Net?
- 19. Jakie są korzyści z obrazów zabezpieczeń, na przykład z logowania do witryny banku?
- 20. Korzyści z generycznych konstruktorów
- 21. Jakie są zalety coroutines?
- 22. Jakie są zalety JRebel?
- 23. Jeśli wybiorę RavenDB, jakie korzyści z SQL Server przegrywam?
- 24. Korzyści z MVC nad MVP
- 25. .NET RegionInfo klasa
- 26. Jak sprawdzić, czy klasa B pochodzi z rodziny szablonów klas
- 27. Rejestracja klasa abstrakcyjna i rozwiązać pochodzi z klasy Jedności
- 28. Jakie są różnice w JIT między Javą a .Net
- 29. Jakie są główne zalety korzystania z eval() w JavaScript?
- 30. Korzyści z używania konstruktora?
Wymagane jest, aby garbage collecter działał. –