Ý nghĩa của CTOR là gì?


221

Trong rất nhiều tệp C #, tôi lưu các thẻ vùng (?) Được đặt tên là CTOR hoặc ctor. Ý nghĩa của ctor là gì? Tại sao một khu vực như vậy được gọi là ctor?

Câu trả lời:


305

Nó chỉ là viết tắt của "constructor" - và đó cũng là cái mà constructor được gọi trong IL. Ví dụ: mở Reflector và xem một loại và bạn sẽ thấy các thành viên được gọi .ctorcho các nhà xây dựng khác nhau.


3
Tại sao lại gọi là .ctor? Ý nghĩa của dấu chấm (.) Ở phía trước là gì?
isuruceanu

@isuruceanu: Tôi nghi ngờ rằng nó cho thấy đó là một tên dành riêng. Chỉ là một phỏng đoán mặc dù.
Jon Skeet

Thế còn xxx. #. Ctor ()? , nó không thực thi FxCop của tôi. stackoverflow.com/questions/17024149/ Mạnh
Andreas Blomqvist

8
@Jessy: Tôi hiếm khi nghe nó phát âm, nhưng tôi phát âm nó là "see-tor".
Jon Skeet

5
@isuruceanu Bất cứ điều gì bắt đầu bằng "." trong IL là siêu dữ liệu.
Giu-đa

45

Thông thường khu vực này nên chứa các hàm tạo của lớp


2
"nên chứa" - điều đó có nghĩa là .ctor không nhất thiết phải luôn luôn tham chiếu một hàm tạo? Hoặc chỉ là nó không luôn luôn tham chiếu hàm tạo của một lớp (vì nó có thể tham chiếu một cấu trúc chẳng hạn)?
cogumel0

@ cogumel0 Hay đúng hơn là "nên chứa s " ;-)
Sнаđошƒаӽ

36

Để mở rộng thêm một chút, có hai loại hàm tạo: bộ khởi tạo cá thể (.ctor), loại bộ khởi tạo (.cctor). Xây dựng mã bên dưới và khám phá mã IL trong ildasm.exe. Bạn sẽ nhận thấy rằng trường tĩnh 'b' sẽ được khởi tạo thông qua .cctor () trong khi trường thể hiện sẽ được khởi tạo thông qua .ctor ()

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

14

Nhập "ctor" và nhấn phím TAB hai lần, điều này sẽ tự động thêm hàm tạo mặc định


Trong VS2013 (và sử dụng R # 2016.1) tôi chỉ phải nhấn tab một lần. Không chắc chắn về các phiên bản khác của VS / R #
ro͢binmckenzie

13
Đây không phải là một câu trả lời cho câu hỏi.
Malfist

9
Không phải là một câu trả lời, vì vậy downvote. Nhưng một điều thú vị để biết, vì vậy không được chú ý. :-)
Sнаđошƒаӽ
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.