В чем разница между String.Format и string.Format(и другими статическими членами примитивных типов данных)?
Насколько я могу судить, любой статический член класса типа String
или Int32
также может быть доступен из соответствующего примитивного типа данных. Итак, String.Format
совпадает с String.Format
, а Int32.MaxValue
совпадает с int.MaxValue
.
Есть ли разница между этими двумя формами? Является предпочтительным для другого? Даже если они идентичны, можно ли считать их более читаемыми?
Изменить: поскольку они идентичны, предпочтительнее ли с точки зрения человека? Вы предпочли бы видеть String.Format
или String.Format
при чтении кода другого пользователя?
Ответы
Ответ 1
Нет никакой разницы, это псевдонимы типов в С# для .NET-типов .Net, вы вызываете тот же метод внизу.
Например:
-
int
является псевдонимом для System.Int32
-
string
является псевдонимом для System.String
Здесь вы можете найти полный список этих псевдонимов в MSDN.
Ответ 2
Это не связанные примитивные типы данных. Это просто сокращения, доступные на С#. string
псевдонимы System.String
и int
алиасы System.Int32
. Вызов int.MaxValue
- это вызов Int32.MaxValue
. С# просто позволяет вам вводить его в сокращенном виде, аналогично тому, что вы набираете, если бы вы были на другом C-подобном языке.
Ответ 3
Большинство ответов есть в целом. ОДНАКО, есть некоторые случаи, когда требуется псевдоним. Сверху моей головы:
public enum MyEnum:Byte {...} //will not compile
public enum MyEnum:byte {...} //correct
Есть еще несколько мест, где вы должны использовать псевдоним; кроме того это оно главным образом style. Следующие два правила общеприняты, возможно, первые больше второго:
- Используйте псевдоним (ключевое слово нижнего регистра) для всех применений, определяющих переменную или тип члена (объявление, параметры, литье, закрытие типового типа)
- Используйте имя типа (идентификатор класса PascalCased) для всех видов использования типа в статическом контексте (вызов статических методов, таких как парсеры или методы манипулирования строками, или статические свойства, такие как MinValue/MaxValue).
Ответ 4
Они идентичны. string
и int
являются синтаксическими алиасами для string
и Int32
соответственно.
Ответ 5
Обратите внимание, что если вы войдете в вашу среду IDE и наведите указатель мыши на string
, вы увидите, что она определена System.String
Это "псевдоним"... одно может быть сокращено для другой вещи. int является псевдонимом для Int32, байт является псевдонимом для байта, char является псевдонимом для Char и т.д. и т.д.
Ответ 6
Смешное доказательство их взаимозаменяемости - это сама IDE.
Начните вводить List<String> list = new
, затем посмотрите на предложение IntelliSense: List<string>
. Это даже не даст вам List<string>
как один из вариантов.
Чтобы ответить на вторую часть вашего вопроса, которая является вопросом мнения, я предпочитаю int
и string
по верхнему регистру по многим причинам:
- Ярко-синий цвет более определен, и если вы быстро читаете код, вы не можете ошибочно назвать имя класса для чего-то еще.
- Чем меньше мне нужно нажать клавишу SHIFT +, тем быстрее я напечатаю
- IntelliSense автоматически завершит имена в нижнем регистре, даже если вы начинаете с прописных букв, поэтому для меня это эстетически неудобно видеть версии верхнего и нижнего регистра того же класса в одной строке или даже в том же проект
- Тип
int
очень прост по своему характеру, и я бы не хотел заставлять мои глаза связывать это с наличием буквы верхнего регистра и двух цифр от его имени (т.е. Int32
); это заставляет его выглядеть слишком конкретным по какой-либо очевидной причине.
Один из моих коллег, в частности, используя Int32
и string
, обеспечивает совместимость с будущими обновлениями .NET; Я не согласен с тем, кто это говорит. Докажите, что я неправ, пожалуйста!
Ответ 7
Строка не является примитивным типом, а просто псевдонимом для String. Это одно и то же.