У чому значення СТОР?


221

У багатьох файлах C # я зберігаю теги регіонів (?) З назвою CTOR або ctor. У чому сенс ctor? Чому такий регіон називають ctor?

Відповіді:


305

Це просто скорочення для "конструктора" - і це те, що конструктор називається в IL, теж. Наприклад, відкрийте Reflector і подивіться на тип, і ви побачите членів, закликаних .ctorдо різних конструкторів.


3
чому його називають .ctor? Яке значення (.) Крапки спереду?
isuruceanu

@isuruceanu: Я підозрюю, що потрібно показати, що це зарезервоване ім'я. Тільки здогадка, хоча.
Джон Скіт

Що з xxx. #. Ctor ()? , це не дає мого виконання FxCop. stackoverflow.com/questions/17024149/…
Андреас Бломквіст

8
@ Джессі: Я рідко чув, як він вимовляється, але я б проголосив це "бачити"
Джон Скіт

5
@isuruceanu Все, що починається з ". в ІЛ є метадані.
Джуд

45

Зазвичай цей регіон повинен містити конструктори класу


2
"повинен містити" - це означає, що .ctor не обов'язково завжди посилається на конструктор? Або просто, що він не завжди посилається на конструктор класу (тому що він може посилатися на структуру, наприклад)?
cogumel0

@ cogumel0 А точніше "повинен містити s " ;-)
Snađошƒаӽ

36

Щоб трохи розширити, існує два види конструкторів: ініціалізатори екземплярів (.ctor), ініціалізатори типу (.cctor). Створіть код нижче та вивчіть ІЛ-код у ildasm.exe. Ви помітите, що статичне поле 'b' буде ініціалізовано через .cctor (), тоді як поле екземпляра буде ініціалізовано через .ctor ()

internal sealed class CtorExplorer
{
   protected int a = 0;
   protected static int b = 0;
}

14

Введіть "ctor" і натисніть клавішу TAB двічі, це автоматично додасть конструктор за замовчуванням


У VS2013 (і за допомогою R # 2016.1) мені потрібно лише один раз натиснути вкладку. Не впевнений в інших версіях VS / R #
ro͢binmckenzie

13
Це не відповідь на запитання.
Malfist

9
Не відповідь, так зважено. Але цікаву річ, яку слід знати, настільки непомітна. :-)
Snađошƒаӽ
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.