В чем разница между Array и object[] в C#?
Я собирался использовать Enum.GetValues()
как обычно, и начал задаваться вопросом, почему он возвращает System.Array
вместо object[]
. Это как-то связано с ?
это привело к вопросу, в чем разница между Array
и object[]
, если таковые имеются?
Я знаю Array
можно использовать для статических методов пока T[]
не может, но есть ли разница для экземпляров? Кажется,у них одинаковые методы/свойства экземпляра.
если нет разница, почему Enum.GetValues()
return Array
вместо object[]
?
1 ответов
я собирался использовать
Enum.GetValues()
как обычно, и начал задаваться вопросом, почему он возвращаетSystem.Array
вместоobject[]
.
, потому что object[]
будет поле всех значений. Нам нужен массив самих значений, а не их коробочные версии.
единственный способ представить это в общем в pre-generics C# является Array
. Помните, что API был в первой версии CLR, которой не хватало дженериков.
там несколько лучших возможных дизайнов в мире с дженериками.
честно говоря, есть лучшие образцы в мире без дженериков, тоже. Два, которые сразу приходят на ум: (1) это мог быть метод экземпляра на Type
, (2) компилятор C# мог сгенерировать public static MyEnum[] GetValues()
метод для каждого перечислимого типа.
это как-то связано с атрибутом ComVisible?
насколько мне известно, нет.
что есть разница между
Array
иobject[]
, если таковые имеются?
я не знаю, как ответить на вопросы "в чем разница". Если бы я спросил вас: "в чем разница между жирафом и млекопитающим?- как бы вы ответили? Странный вопрос.
Array
базовый класс object[]
- это лучшее, что я могу вам сказать.
я знаю
Array
может быть использован для статических методов, в то время какT[]
не может, но есть ли разница для примеры?
я тоже не понимаю этого вопроса. Можете ли вы привести пример того, что вы подразумеваете под "может использоваться для статических методов"?
возможно, вы имеете в виду странность, что обычно вы можете получить доступ к статическим членам типа из производного типа, но не можете с типами массивов? То есть можно сказать:
class B { public static void M() {} }
class D : B {}
...
B.M();
D.M(); // Same thing
и это работает:
Array.Sort(whatever);
но это не работа:
int[].Sort(whatever);
это странность того, как C# обрабатывает операторы доступа членов, но это странность, которая ничего не болит, потому что, если вы набираете int[].Sort()
скорее всего, вы делаете что-то не так.
в любом случае, я не вижу, какое это имеет отношение к твоему вопросу. Вы можете уточнить вопрос?
если нет никакой разницы, почему перечисление.GetValues () возвращает массив вместо object[]?
этот вопрос бессвязный. Если вы сказали мне, что" Белый дом "и" Пенсильвания-авеню 1600 "были одним и тем же адресом, и я тогда сказал:" Ну, если нет никакой разницы, то почему президент Трамп живет в Белом доме вместо Пенсильвания-авеню 1600?- как ты ответишь на мой безумный вопрос? если нет никакой разницы, то нет никакой разницы, так почему это имеет значение?
в этом случае вопрос основан на ложной предпосылке, как object[]
и Array
are разные. Но на этот вопрос нельзя ответить.