Чи може хтось пояснити мені умову кодування C #?


14

Нещодавно я почав працювати з Unity3D і, головним чином, сценаріями з C #. Як правило, я програмую на Java, відмінності не надто великі, але я все-таки послався на аварійний курс, щоб переконатися, що я на правильному шляху.

Однак моя найбільша цікавість із C # полягає в тому, що він пише великі літери перших літер назв методів (наприклад, Java: getPrime()C #: GetPrime()aka: Pascal Case?). Чи є для цього вагома причина? На сторінці курсу "аварії" я розумію, що я прочитав, що, мабуть, це умова для. що, скажімо, використовує Java.

Примітка. Я розумію, що мови мають власні умови кодування (методи Python - це все нижнє регістр, який також застосовується в цьому питанні), але я ніколи не розумів, чому це не формалізовано в стандарт.


18
Я дійсно не думаю , що ви можете дивитися на camelCaseі PascalCaseта underscore_caseі сказати , що один з них нормально (навіть відносно нормально) , а інші ні. Як сказав @dasblinkenlight, це вибір довільний. Єдине, що змушує вас думати, що умова C # незвична - це те, що ви "звичайно програмуєте на Яві", і таким чином звикли до довільного вибору, зробленого для Java.
Carson63000

Використовуйте JavaScript замість .. для Unity3D :)
Ліпіс

@Lipis Чому для - крім особистого смаку? ;-)
вхід

@AedonEtLIRA абсолютно особистий .. неважливо :) Насолоджуйтесь Єдністю незалежно від мови .. Ви в кінцевому підсумку використовуєте ..
Ліпіс

@Lipis Поки це чудово. Тони дзвіночків, і я ще не впустив на це гроші. Але я віддаю перевагу структурованому стилю C # (c / c ++) та java.
жовтня

Відповіді:


27

Конвенції про іменування являють собою довільний вибір їх видавця. Ніщо в самій мові не забороняє вам називати свої методи так, як ви робите на Java: якщо перший символ - це буква / підкреслення, а всі інші символи - це літери, цифри чи підкреслення, C # не збирається скаржитися. Однак бібліотеки класів, що постачаються разом з .NET, дотримуються принципу, прийнятого корпорацією Майкрософт. Microsoft також опублікувала ці вказівки , щоб інші могли також прийняти їх для власних бібліотек класів. Незважаючи на те, що ви вирішите дотримуватися чи ігнорувати вказівки Майкрософт, ознайомлення з вашим кодом іншими особами може пройти швидше, якщо ви будете дотримуватися тих самих інструкцій щодо іменування.


Однак зазвичай існує певна обґрунтування конвенції, і коли я читаю "Чи є для цього вагомі причини?" Я розумію це як питання про ЧОМУ НЕ ЩО.
greenoldman

Паскаль для публічних / внутрішніх / статичних членів та всіх методів. Верблюд для приватних. Це допомагає розрізнити сферу дії маркера під час його сканування. thisКлючове слово робить те ж саме. Вибір стилю практичний, навіть якщо вони можуть здатися чужими
Гусдор

23

Можливо, через вплив Паскаля / Дельфи. Творець C # і Delphi зрештою була однією і тією ж людиною (Anders Hejlsberg).

Конвенції кодування Delphi за великим рахунком збігаються в цьому аспекті як C #; див. http://www.econos.de/delphi/cs.html#ObjectPascal_Procedures або http://wiki.delphi-jedi.org/index.php?title=Style_Guide#Method_Naming - збіг?


4
+1 для цього, оскільки він дає те, що може бути фактичною причиною, чому цей конкретний довільний вибір був зроблений для C #.
Максим Мінімус

4

Окрім інших зроблених відповідей, наявність верблюдового випадку для методів означає, що вони можуть конфліктувати з іменами для приватних членів, параметрами та змінними методів, які використовують регістр верблюда для їх іменування. У Java (та C # 1.0) це не так вже й часто, оскільки використання делегатами незручне та рідкісне. У сучасних C # це не зовсім поширене явище , але воно також не є нечуваним.


1
Підкреслення не слід використовувати у приватних полях C # (див. Blogs.msdn.com/b/brada/archive/2005/01/26/361363.aspx , напр.), Але воно є суперечливим і часто зустрічається.
Єнс

1
покладатися на те, щоб розрізняти мовні конструкції - це дуже погана ідея, незалежно від того, дозволяє вам це зробити чи ні.
gbjbaanb

4
@Telastyn це твердження досить шокуюче. Більшість бібліотек класів .NET використовує цю умову.
MattDavey

1
@Dunk, як раптом моя конвенція? Я просто передавав коментар, я не маю жодної думки з цього приводу :)
MattDavey

2
@MarjanVenema: не впевнений, про що ти говориш, але C # досить чутливий до регістру, і ти, звичайно, може мати зіткнення між аналогічно закритими членами. Це стає цікавим та захоплюючим, коли у вас є фактичні регістрові мови, такі як VB.NET, з якими ви працюєте на рівні бібліотеки.
Wyatt Barnett
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.