Избыточно унаследовать от Object в С#?
Как указано выше, избыточно ли оно наследовать от Object в С#?
У обоих наборов кода ниже приводятся эквивалентные объекты?
class TestClassUno : Object
{
// Stuff
}
против.
class TestClassDos
{
// Stuff
}
Я заглядывал в MSDN, но не смог найти ничего прекрасного.
Ответы
Ответ 1
Если оставить неопределенным, каждое определение class
будет неявно наследоваться от System.Object
, поэтому два определения эквивалентны.
Единственный раз, когда эти два будут отличаться, если кто-то фактически определил другой тип Object
в том же пространстве имен. В этом случае локальное определение Object
будет иметь приоритет и изменить объект наследования
namespace Example {
class Object { }
class C : Object { }
}
Очень угловой случай, но не указывал бы это, если бы я не видел его раньше
Обратите внимание, что это не так, если вы использовали Object
вместо Object
. Ключевое слово С# 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
class C : object { } // Uses our System.Object
}
Ответ 2
Да, все в конечном счете наследуется от объекта, если он определен как class
. Оставьте явное наследование вне вашего кода.
Ответ 3
Да, он избыточен для наследования объекта в классе
Ответ 4
MSDN: Класс объекта: Поддерживает все классы в иерархии классов .NET Framework и предоставляет низкоуровневые сервисы для производных классов. Это конечный базовый класс всех классов в .NET Framework; это корень иерархии типов.
Проверьте это исследование: наследует от объекта? Исследование того, как.
![enter image description here]()
Ответ 5
Объект является матерью всех классов в .Net. Нет ничего выше.
Все классы наследуют от него. Итак, этот код
class TestClassDos
{
// Stuff
}
автоматически означает, что он наследует объект.
Доказательство. Вы можете придать любому объекту объект, который возможен, если он наследуется от него.
Сводка класса объектов говорит
// 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.
Ответ 6
Да, они оба одинаковы, я не думаю, что я видел, что кто-то упоминал структуры, но все объекты (независимо от того, объявляете ли вы класс или структуру), все они в конечном итоге наследуются от Object, см. статью Объект MSDN и эту статью в Structs