Почему C # чувствителен к регистру?[закрыто]

StackOverflow https://stackoverflow.com/questions/494561

  •  20-08-2019
  •  | 
  •  

Вопрос

Какие причины существуют для того, чтобы сделать C # чувствительным к регистру?

Я рассматриваю возможность перехода с VB.NET, чтобы воспользоваться некоторыми возможностями языка (CCR и yield), и понимание причин, лежащих в основе этого различия, может облегчить переход.

[ОБНОВЛЕНИЕ] Ну, я сделал решительный шаг три дня назад.Изучение C # не было особенно сложным, хотя я едва мог вспомнить свои дни на C ++ в конце 90-х.

Меня раздражает Чувствительность к регистру?не так сильно, как я думал...плюс я нахожу, что это действительно выгодно.На самом деле я действительно доволен CCR как моделью асинхронного координирующего программирования.Если бы только у меня было больше времени на текущий проект, я бы портировал кодовую базу на C #, чтобы воспользоваться всеми преимуществами.Хотя это было бы несправедливо по отношению к моему клиенту.

Оцениваю свой текущий проект сейчас, и я вижу блокирующие потоки ПОВСЮДУ!Ааааа!!!

[ОБНОВЛЕНИЕ]

Ну, я программирую на C # уже почти год.Мне действительно нравится язык, и я действительно ненавижу переходить на VB (особенно когда это неизбежно!)

А чувствительность к регистру?даже не проблема

Это было полезно?

Решение

C # учитывает регистр, потому что он соответствует языкам стиля C, которые все чувствительны к регистру.Это по памяти, вот Ссылка на MSDN что у меня сейчас не работает, я не могу проверить.

Я также хотел бы отметить, что это очень верный вариант использования:

public class Child
{
   private Person parent;
   public Person Parent
   {
      get { return parent;}
   }
}

Да, вы можете обойти это, используя префиксы в ваших переменных-членах, но некоторым людям не нравится это делать.

Другие советы

Вероятно, они думали: "мы не хотим, чтобы люди использовали someVariable в одном месте и someVariable в другом.

Я думаю, тот факт, что кейс может передавать информацию, является очень веской причиной.Например, по соглашению имена классов, общедоступных методов и свойств начинаются с заглавной буквы по соглашению.И наоборот, поля и локальные переменные начинаются со строчной буквы.

После многолетнего использования языка я пришел к тому, что мне это по-настоящему понравилось: код намного легче читать, когда вы можете считывать информацию просто из оболочки слов.

И вот почему люди иногда так поступают, и это может иметь смысл:

Foo foo = new Foo();

Я делаю это постоянно, это очень полезно.Если вы подумаете об этом в более полезной ситуации, подобной этой:

Image image = Image.LoadFrom(path);

Просто иногда имеет смысл называть экземпляр тем же именем, что и имя класса, и единственный способ отличить их друг от друга - это оболочка.В C ++ учет регистра становится еще более полезным, но это уже другая история.Я могу уточнить, если вам интересно.

Рассмотрим имена переменных в следующем псевдокоде:

class Foo extends Object { ... }
...
foo = new Foo();

Учет регистра позволяет соглашениям, использующим регистр, разделять имена классов и экземпляры;такие соглашения вовсе не редкость в мире разработки.

C # наследует чувствительность к регистру от C и Java, которую он пытается имитировать, чтобы разработчикам было проще переходить на C#

Возможно, были какие-то веские причины для того, чтобы сделать C чувствительным к регистру, когда он был создан три десятилетия назад, но, похоже, нет никаких записей о том, почему.Джефф Этвуд написал хорошую статью , выступающую за это чувствительность к регистру может больше не иметь смысла.

Я думаю, что наличие идентификаторов, чувствительных к регистру, может сделать код более читаемым за счет использования соглашений об именовании, ну, и даже без соглашений об именовании, согласованность, обеспечиваемая чувствительностью к регистру, гарантирует вам, что одна и та же сущность всегда записывается одинаково.

Вероятно, скопировано с C, C ++, Java и т.д.или может быть сохранен таким же специально, чтобы он был похож на то, что есть в других языках.

Это было просто делом вкуса команды разработчиков языка C #.Я готов поспорить, что это было сделано для совместимости с другими языками семейства C.Однако это приводит к некоторым плохим методам программирования, таким как частное поле и его ассоциированное свойство, отличающиеся только в случае первой буквы.

Редактировать:

Почему это может быть сочтено плохим.

class SomeClass 
{
    private int someField;

    public int SomeField
    {
        get { return SomeField; } 
        // now we have recursion where its not wanted and its 
        // difficult for the eye to pick out and results in a
        // StackOverflowException.
    }
}

Добавление к закрытым полям префикса _ или m может облегчить их определение.Это не имеет большого значения, и лично я сделаю именно то, что я только что назвал плохим (так что подайте на меня в суд!).

Синтаксический анализ также немного проще для языков, чувствительных к регистру.Пока нет веских причин выбирать способ без учета регистра, зачем беспокоиться?

Вы смотрите на это очень ограниченным образом - со своей точки зрения.Разработчики языка должны принимать во внимание совершенно другой набор соображений:культурные причины, совместимость с другими языками, общие методы кодирования и т. Д

Все современные языки учитывают регистр:какие из них этого не делают?

Как человек, который использовал BASIC в течение нескольких лет, я очень устал от разработчиков, использующих разные варианты для одной и той же переменной.На такого рода вещи очень утомительно смотреть и они поощряют небрежное программирование.Если вы не можете побеспокоиться о том, чтобы разобраться в деле правильно - что еще вы не можете побеспокоиться сделать?

От Руководство разработчика .NET Framework Соглашения о капитализации, Чувствительность к регистру:

Правила использования заглавных букв существуют исключительно для того, чтобы упростить чтение и распознавание идентификаторов .Оболочка не может быть использована как средство предотвращения имен конфликтов между элементами библиотеки.

Не думайте, что все языки программирования чувствительны к регистру. языки чувствительны к регистру.Они такие нет.Имена не могут различаться по регистру только.

Мое лучшее предположение о том, почему он чувствителен к регистру, заключается в том, что Unix чувствителен к регистру.Деннис Ритчи, отец C, также был соавтором Unix, поэтому имеет смысл, чтобы язык, который он написал, соответствовал среде, доступной в то время.C # просто унаследовал это от своего предка.Я думаю, что это было хорошее решение со стороны Microsoft, поскольку пути Windows не чувствительны к регистру.

Я предполагаю, что вы хотели бы видеть код, подобный:

SomeField=28;
someField++;
somefield++;
SOMEFIELD++;

скомпилировано так, как если бы someField в любом варианте обсадной колонны было одной и той же переменной.

Лично я считаю, что это плохая идея.Это поощряет лень и / или беспечность.Зачем утруждать себя правильным оформлением вещи, если это все равно не имеет значения?Ну, раз уж мы об этом заговорили, возможно, компилятору следует разрешить орфографические ошибки, например SoemField++?

Присвоение имен.Имена трудно подобрать, и вы не хотите создавать новое имя, когда говорите о чем-то подобном, или использовать какие-то обозначения, чтобы отделить их друг от друга.

Такие сценарии представляют собой свойства для полей или аргументов в конструкторе, которые вы собираетесь присвоить полям.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top