Mọi nhà phát triển .net đều biết về khái niệm về thuộc tính. Một thô 99,99%, nó chỉ là một phần của siêu dữ liệu dán cùng nhau hai phương pháp, một getter, và một setter.Sự tò mò của phương thức let_ property
Điều tương tự thường xảy ra với các sự kiện, với phương thức thêm, xóa và gọi.
ECMA-335 mô tả loại ngữ nghĩa phương thức «Khác», sẽ áp dụng cho thuộc tính hoặc sự kiện. Về mặt khái niệm, một tài sản hoặc một sự kiện có thể có nhiều phương thức «khác».
Hôm nay là ngày đầu tiên tôi tình cờ gặp một thuộc tính với phương thức «khác». Và tất nhiên nó phải liên quan đến COM. Các EnvDTE.Property giao diện, trong lắp ráp EnvDTE (sử dụng để viết addin để Visual Studio), chứa một tài sản được xác định như sau:
.property object Value()
{
.custom instance void [mscorlib]System.Runtime.InteropServices.DispIdAttribute::.ctor(int32) = (01 00 00 00 00 00 00 00)
.get instance object EnvDTE.Property::get_Value()
.other instance void EnvDTE.Property::let_Value(object)
.set instance void EnvDTE.Property::set_Value(object)
}
Với let_Value được định nghĩa là:
.method public hidebysig newslot specialname abstract virtual
instance void let_Value([in] object marshal(struct) lppvReturn) runtime managed internalcall
{
.custom instance void [mscorlib]System.Runtime.InteropServices.DispIdAttribute::.ctor(int32) = (01 00 00 00 00 00 00 00)
}
Rõ ràng, VBScript và các phiên bản của VB trước VB.NET có thể định nghĩa các thuộc tính bằng cách sử dụng từ khóa Let. Và Let có cùng chữ ký với Set. Tôi cảm thấy rằng có một mối quan hệ ở đây.
Nhưng có ai biết thuộc tính này đã được khai báo bằng ngôn ngữ mà EnvDTE đã được viết không? Làm thế nào tôi có thể tạo ra một hội đồng với các mô hình tương tự (không sử dụng ilasm, đó sẽ là quá dễ dàng)? Và có ai đã phải đối mặt với một tài sản tương tự?
Và có ai đã thấy các thuộc tính «khác», có thể có ngữ nghĩa khác với ngữ nghĩa này không? Và nếu có, chúng được sử dụng để làm gì?
Heh, cảm ơn vì đã điều tra kỹ lưỡng! –
Niềm vui của tôi. Tôi chắc chắn rằng tôi sẽ đánh bạn cho một số thứ Cecil trong trở lại mặc dù tại một thời gian trong tương lai: P –
Ồ, và fwiw, không phải cuốn sách của Lidin cũng như tiêu chuẩn CLI chú thích cung cấp nhiều thông tin hơn. Nó chỉ là có thể có các phương pháp khác liên quan đến và sự kiện hoặc một tài sản. –