для чего нужно, что бы все объеты наследовались от Object'a?
От: Аноним  
Дата: 29.08.06 10:33
Оценка: :)
Мне тут вопрос задали — для чего нужно, что бы все объеты наследовались от Object'a?

Я ответил — что бы можно было любые два объекта сравнить методом Equal().

Я прав? Что ещё можно дополнить сюда?

Спасибо.

30.08.06 10:18: Перенесено модератором из '.NET' — TK
30.08.06 10:19: Перенесено модератором из '.NET' — TK
Re: для чего нужно, что бы все объеты наследовались от Objec
От: denisio_mcp  
Дата: 29.08.06 10:41
Оценка:
Здравствуйте, <Аноним>, Вы писали:

А>Мне тут вопрос задали — для чего нужно, что бы все объеты наследовались от Object'a?

А>Я ответил — что бы можно было любые два объекта сравнить методом Equal().
А>Я прав? Что ещё можно дополнить сюда?

Собственно:
* распределение памяти
* работа с GC
* подсчет ссылок и все такое
... << RSDN@Home 1.2.0 alpha rev. 0>>
для чего нужно, что бы все объеты наследовались от Object'a?
От: Аноним  
Дата: 29.08.06 10:41
Оценка:
Why an Object Class?
http://www.csharp-station.com/Articles/ObjectClass.aspx


данное сообщение получено с www.gotdotnet.ru
ссылка на оригинальное сообщение
для чего нужно, что бы все объеты наследовались от Object'a?
От: Аноним  
Дата: 29.08.06 10:42
Оценка:
А это "что бы можно было любые два объекта сравнить методом Equal()" совсем не главная причина, как мне кажется...


данное сообщение получено с www.gotdotnet.ru
ссылка на оригинальное сообщение
Re: для чего нужно, что бы все объеты наследовались от Objec
От: fmiracle  
Дата: 29.08.06 10:49
Оценка: +1
Здравствуйте, <Аноним>, Вы писали:

А>Мне тут вопрос задали — для чего нужно, что бы все объеты наследовались от Object'a?

А>Я ответил — что бы можно было любые два объекта сравнить методом Equal().
А>Я прав? Что ещё можно дополнить сюда?

Я бы сказал, что в первую очередь это возможность строить обобщенные коллекции, в которые можно складывать объекты любых типов. К ним добавить такие же перечислители, методы и можно выводить такие же обобщенные алгоритмы...

(генерики во многих случаях решают проблему лучше, но они не всегда были, да и они не решают проблему складывания в одну коллекцию объектов различных типов, которая время от времени да возникает).
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
для чего нужно, что бы все объеты наследовались от Object'a?
От: Аноним  
Дата: 29.08.06 11:19
Оценка: +1
Это нужно дя глобальной поддержки полиморфизма всеми типами .NET. Это главнои и отсюда вытекает все остальное.
Также в object содержаться наследуемые всеми типами методы, public: кроме Equals есть еще несколько:
[Serializable, ComVisible(true), ClassInterface(ClassInterfaceType.AutoDual)]
public class Object
{
      // Methods
      [ReliabilityContract(Consistency.WillNotCorruptState, Cer.MayFail)]
      public Object();
      public virtual bool Equals(object obj);
      public static bool Equals(object objA, object objB);
      private void FieldGetter(string typeName, string fieldName, ref object val);
      private void FieldSetter(string typeName, string fieldName, object val);
      [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)]
      protected override void Finalize();
      private FieldInfo GetFieldInfo(string typeName, string fieldName);
      public virtual int GetHashCode();
      [MethodImpl(MethodImplOptions.InternalCall)]
      public extern Type GetType(); // для поддержки ad hoc полиморфизма, в частности
      [MethodImpl(MethodImplOptions.InternalCall)]
      internal static extern bool InternalEquals(object objA, object objB);
      [MethodImpl(MethodImplOptions.InternalCall)]
      internal static extern int InternalGetHashCode(object obj);
      [MethodImpl(MethodImplOptions.InternalCall)]
      protected extern object MemberwiseClone();
      [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)]
      public static bool ReferenceEquals(object objA, object objB);
      public virtual string ToString();
}






данное сообщение получено с www.gotdotnet.ru
ссылка на оригинальное сообщение
Re: для чего нужно, что бы все объеты наследовались от Objec
От: Аноним  
Дата: 29.08.06 11:54
Оценка:
Причина — всеобщий вселенский полиморфизм. Если вам нужно в качестве параметра принимать ЛЮБОЙ объект вы просто пишете:

void method(object param)

Это также необходимо для многих полезных функций. Например, как бы можно было реализовать ArrayList без этого? Правда, в 2.0 появились Generics...

Так же, видимо связано со внутренним устройством рантайма.
Мой блог


данное сообщение получено с www.gotdotnet.ru
ссылка на оригинальное сообщение
Re: для чего нужно, что бы все объеты наследовались от Objec
От: quadrochups ЮАР  
Дата: 30.08.06 10:37
Оценка:
А>Мне тут вопрос задали — для чего нужно, что бы все объеты наследовались от Object'a?

А>Я ответил — что бы можно было любые два объекта сравнить методом Equal().


Да. И ещё вызывать ToString() )


Да бог их знает, зачем они нужны... Как говорят на том же csharp-station, "I believe the practice of using the object class for generic routines will be replaced in many future scenarios by the use of Generics in C# v2.0". А если взять чистый ООЯ, да не заниматься тупизмом типа reflection, то можно вообще этот object не вводить, а использовать везде абстрактную "ссылку на класс".
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.