Marge-массив, который представляет собой разные типы данных:
var arrayInt = [Int]()
arrayInt.append(6)
var testArray = ["a",true,3,"b"] as [Any]
testArray.append(someInt)
Выход:
["a", true, 3, "b", "hi", 3, [6]]
Причина, которая static readonly
используется вместо const
, должна использовать с неуправляемым кодом, как обозначено Microsoft здесь в Общая Исходная Общеязыковая инфраструктура 2.0 Выпуска . Файл для взгляда на sscli20\clr\src\bcl\system\string.cs
.
Пустые постоянные хранения значение пустой строки. Мы должны вызвать конструктора String так, чтобы компилятор не отмечал это как литерал.
отмечание это как литерал означало бы, что не обнаруживается как поле, к которому мы можем получить доступ от собственного компонента.
я нашел эту информацию от эта удобная статья в CodeProject.
Я думаю, что существует много беспорядка и плохих ответов здесь.
, В первую очередь, const
поля static
участники ( не члены экземпляра ).
раздел Check 10.4 Констант спецификации языка C#.
Даже при том, что константы считают статическими участниками, объявление константы ни требуют, ни позволяет статический модификатор.
, Если public const
участники статичны, нельзя было бы полагать, что константа создаст новый Объект.
, Учитывая это, следующие строки кода делают точно то же самое относительно создания нового Объекта.
public static readonly string Empty = "";
public const string Empty = "";
Вот примечание от Microsoft, которая объясняет различие между 2:
ключевое слово только для чтения отличается от ключевого слова константы. Поле константы может только быть инициализировано в объявлении поля. Поле только для чтения может быть инициализировано или в объявлении или в конструкторе. Поэтому поля только для чтения могут иметь различные значения в зависимости от используемого конструктора. Кроме того, в то время как поле константы является постоянным временем компиляции, поле только для чтения может использоваться для констант этапа выполнения...
, Таким образом, я нахожу, что единственным вероятным ответом здесь является Jeff Yates.
Этот ответ существует в исторических целях.
Первоначально:
, поскольку String
класс и поэтому не может быть константа.
Расширенное Обсуждение:
Много полезного диалогового окна было выработано в проверке этого ответа, и вместо того, чтобы удалить его, это содержание воспроизводится непосредственно:
В.NET, (в отличие от этого, в Java) строка и Строка являются точно тем же. И да, у Вас могут быть константы строкового литерала в.NET †“DrJokepu 3 февраля '09 в 16:57
, Вы говорящий, что Класс не может иметь констант? †“StingyJack 3 февраля '09 в 16:58
Да, объекты должны использовать только для чтения. Только структуры могут сделать константы. Я думаю, когда Вы используете
string
вместоString
, компилятор изменяет константу в только для чтения для Вас. Все, чтобы сделать с оставанием счастливым C программистов. †“Garry Shutler 3 февраля '09 в 16:59tvanfosson просто объяснил это подробный. "X не может быть константа, потому что содержание Y является классом", было просто немного слишком контекстно-свободно ;) †“Leonidas 3 февраля '09 в 17:01
строка. Пустой статическое свойство, которое возвращает экземпляр Строкового класса, а именно, пустая строка, не сам строковый класс. †“tvanfosson 3 февраля '09 в 17:01
Пустой является экземпляром только для чтения (это не свойство) Строкового класса. †“senfo 3 февраля '09 в 17:02
Главное причинение вреда. Я все еще думаю, что я прав, но теперь я менее уверен. Сегодня вечером требуется исследование! †“Garry Shutler 3 февраля '09 в 17:07
пустая строка является экземпляром строкового класса. Пустой статическое поле (не свойство, я признаю ошибку) на Строковом классе. В основном различие между указателем и вещью это указывает на. Если бы это не было только для чтения, то мы могли бы измениться, которые инстанцируют поле Empty, относится к. †“tvanfosson 3 февраля '09 в 17:07
Garry, Вы не должны проводить исследование.Подумайте об этом. Строка является классом. Пустой экземпляр Строки. †“senfo 3 февраля '09 в 17:12
существует что-то, что я не вполне получаю: как же может статический конструктор Строкового класса создавать экземпляр Строкового класса? Не то, что своего рода "курица или яйцо" сценарий? †“DrJokepu 3 февраля '09 в 17:12 5
Этот ответ был бы корректен почти для любого другого класса, но Системы. Строка..NET делает большое специальное преобразование регистра производительности для строк, и один из них - то, что Вы, CAN имеет строковые константы, просто попробуйте его. В этом случае у Jeff Yates есть корректный ответ. †“Joel Mueller 3 февраля '09 в 19:25
, Как описано в В§7.18, константное выражение является выражением, которое может быть полностью оценено во время компиляции. Так как единственный способ создать ненулевое значение ссылочного типа кроме строки состоит в том, чтобы применить новый оператор, и так как новый оператор не разрешен в константном выражении, единственное возможное значение для констант ссылочных типов кроме строки является нулевым. Предыдущие два комментария были взяты непосредственно из спецификации языка C# и повторяют то, что упомянул Joel Mueller. †“senfo 4 февраля '09 в 15:05 5