2011-01-15 34 views
18

tôi tò mò về đoạn mã này:công cụ sửa đổi tham số này trong C#?

public static class XNAExtensions 
{ 
    /// <summary> 
    /// Write a Point 
    /// </summary> 
    public static void Write(this NetOutgoingMessage message, Point value) 
    { 
     message.Write(value.X); 
     message.Write(value.Y); 
    } 
    // ... 
}; 

nào từ khóa this có ý nghĩa gì bên cạnh các kiểu tham số? Tôi dường như không thể tìm thấy bất kỳ thông tin nào về nó ở bất kỳ đâu, ngay cả trong đặc tả C#.

Trả lời

24

Đó là số extension method.

Cú pháp có nghĩa là bạn có thể gọi phương thức như thể nó là một thành viên của lớp NetOutgoingMessage:

var msg = new NetOutgoingMessage(); 
msg.Write(somePoint); 

này về cơ bản là viết lại bởi trình biên dịch để:

var msg = new NetOutgoingMessage(); 
XNAExtensions.Write(msg, somePoint); 

Nó chỉ đẹp cú pháp đường.

0

Nó chỉ ra rằng Write là một extension method đến lớp NetOutgoingMessage.

2

Đó là cách xác định extension method.

Điều này về cơ bản có nghĩa là, mặc dù phương pháp này được chứa trong một lớp tĩnh đóng gói, khi sử dụng các loại chỉ định (trong các tham số phương pháp mở rộng nhãn this) một phương pháp như vậy sẽ được tự động tiếp xúc như vậy:

var typeInstance = new TypeWithExtensionMethod(); 
typeInstance.ExtensionMethod(anyParametersRequiredButNotTypeInstance); 

là có thể, như trái ngược với:

var type = new TypeWithExtensionMethod(); 
ExtensionMethods.ExtensionMethod(typeInstance, anyOtherParametersRequired); 
0

nó có nghĩa là nó là một phương pháp khuyến nông. MSDN

0

Đó là phương pháp mở rộng cho lớp học NetOutgoingMessage.

Xem ở đây: link text

3

nào từ khoá này có ý nghĩa gì bên cạnh các kiểu tham số?

Điều đó có nghĩa là phương pháp là phương pháp mở rộng.

Tôi dường như không tìm thấy bất kỳ thông tin nào về nó ở bất cứ đâu, ngay cả trong thông số C#.

Thông tin bạn tìm kiếm nằm trong phần 10.6.9 của đặc tả C# 4.

Các vấn đề liên quan