Избыточный наследовать от объекта в C #?

Как указано выше, избыточно ли наследовать от Object в c #? Приводят ли оба приведенных ниже кода к определению эквивалентных объектов?

class TestClassUno : Object
{
    // Stuff
}

против

class TestClassDos
{
    // Stuff
}

Я слонялся по MSDN, но не смог найти ничего совершенно убедительного.

 Jeff Mercado24 мая 2012 г., 18:58
Любое определение класса, которое явно не указывает базовый класс, будет наследоваться отobject неявно.

Ответы на вопрос(5)

Решение Вопроса

class определение будет неявно наследоваться отSystem.Object следовательно, два определения эквивалентны.

Единственный раз, когда эти два будут разными, это если кто-то определит другогоObject введите в том же пространстве имен. В этом случае локальное определениеObject будет иметь приоритет и изменить объект наследования

namespace Example {
  class Object { } 
  class C : Object { } 
}

Очень угловой случай, но я бы не указал на это, если бы я не видел его раньше

Обратите внимание, что то же самое не верно, если вы использовалиobject вместоObject, Ключевое слово C #object это псевдоним типа дляSystem.Object и, следовательно, он не будет соответствоватьExample.Object.

namespace Example2 { 
  class Object { } 
  class C : Object { } // Uses Example.Object
  class D : object { } // Uses System.Object
}

Конечно, если у вас есть действительно злой разработчик, вы все равно можете вызвать путаницу сobject

namespace System { 
  class Object { 
    private Object() { } 
  }
}

namespace Example3 {
  // This will properly fail to compile since it can't bind to the private
  // Object constructor.  This demonstrates that we are using our definition
  // of Object instead of mscorlib's 
  class C : object { } // Uses our System.Object
}
 24 мая 2012 г., 19:04
Не местныйExample.Object все еще наследовать отSystem.Object ?
 24 мая 2012 г., 19:05
@ МестныйObject действительно, ноC в этом случае будет наследовать отExample.Object
 24 мая 2012 г., 19:33
@Арен: Да, но Джаред хотел сказать, что в этом случаеC : Object не является избыточным.
 24 мая 2012 г., 21:26
@ Я бы подумал, что, в конечном счете, это будет ... но средний / локальный "объект" может быть перезаписано, изменено, расширено ... Если я не понимаю это неправильно.
 24 мая 2012 г., 22:20
@JaredPar & amp; @WernerCD, я действительно только спросил, потому что это казалось немного вне области для вопроса. Понятно, да, кто-то может написать местныйObject функциональность класса и переопределения, но это не кажется мне частью области видимости. Мой вопрос был частично риторическим, поскольку я подразумевал, что в конечном итоге полученный класс все еще будет находиться в дереве наследованияSystem.Object.

class, Оставьте явное наследование в своем коде.

 24 мая 2012 г., 19:15
struct тоже на самом деле.
 24 мая 2012 г., 23:00
@Cicada:struct производныйdirectly из System.ValueType. Он также является производным от System.Object (в конце концов, все происходит), но типы структур даже не применяются к OP, поскольку они могут реализовывать только интерфейсы; конструкция, объявленная как структура, никогда не может быть получена напрямую из чего-либо, кроме ValueType.
 21 июл. 2015 г., 02:18
Not everything derives from object (Типы указателей не. Также интерфейсы и открытые типы параметров (typeof(List<>)) вещи, которые вы можете представлять какType но не производные от объекта)

Класс объекта : Поддерживает все классы в иерархии классов .NET Framework и предоставляет низкоуровневые сервисы производным классам. Это основной базовый класс всех классов в .NET Framework; это корень иерархии типов.

Проверьте это исследование:наследует от объекта? Расследование как.

enter image description here

.

Все классы наследуют от него. Итак, этот код

class TestClassDos
{
    // Stuff
}

автоматически означает, что он наследует от объекта.

Proof: Вы можете типизировать любую сущность к объекту, что возможно, если она наследуется от нее.

Резюме класса Object говорит

// Supports all classes in the .NET Framework class hierarchy and provides low-level
// services to derived classes. This is the ultimate base class of all classes
// in the .NET Framework; it is the root of the type hierarchy.
 24 мая 2012 г., 19:11
Да, или по структурам, которые также наследуют отobject, Но я хочу сказать, что тот факт, что.ToString() доступно только из-за специального исключения в компиляторе, который добавляетobjectчлены даже для некоторых типов, которые на самом деле не наследуются отobject.
 24 мая 2012 г., 19:08
@hvd: Но в конечном итоге интерфейсы будут реализованы классами.
 24 мая 2012 г., 19:07
Вы также найдете.ToString() в интерфейсах в .NET, но интерфейсы не наследуются отSystem.Object, (Я согласен с вашим выводом, но не с тем доказательством, которое вы даете.)

они оба - одно и то же, я не думаю, что видел, чтобы кто-то упоминал структуры, но все объекты (независимо от того, объявляете ли вы класс или структуру), все они в конечном счете наследуются отObject, видеть этоОбъект MSDN статья и эта другая статья оСтруктуры

Ваш ответ на вопрос