2009-02-18 30 views
6

tôi nhận thấy sử dụng thú vị này của từ khóa "này" trong khi xem đoạn code tháo rời của Int32.GetHashCode() trong .NET Reflector:Từ khoá "này" có thể được sử dụng với các loại giá trị không?

public override int GetHashCode() 
{ 
    return this; 
} 

tôi luôn nghĩ "này" chỉ được sử dụng với các loại tài liệu tham khảo không giá trị loại. Trong đoạn mã trên, bạn có thể sử dụng boxing mỗi khi bạn cố gắng lấy mã băm của một int không?

Từ các tài liệu của từ khóa "này" trong MSDN: - Từ khóa này đề cập đến các trường hợp hiện tại của lớp

Trân

Trả lời

12

Vâng, this có giá trị trong các loại giá trị. Nó không dẫn đến đấm bốc. Trong khi nó tham chiếu đến kiểu giá trị, nó không phải là một tham chiếu trong cùng một tham chiếu kiểu tham chiếu - nó là một sự thuận tiện biên dịch/phát triển hơn là một tham chiếu thời gian chạy.

Mục 7.5.7 của C# Thông số kỹ thuật khẳng định:

  • Khi điều này được sử dụng trong một chính thể hiện trong một constructor dụ của một cấu trúc, nó được phân loại như một biến. Loại biến là loại cá thể (§10.3.1) của cấu trúc trong đó việc sử dụng xảy ra và biến số đại diện cho cấu trúc là được tạo. Các biến này của một nhà xây dựng thể hiện của một struct cư xử giống hệt như một tham số ra của các loại trong struct Đặc biệt, điều này có nghĩa rằng biến phải chắc chắn giao trong mỗi con đường thực hiện các constructor dụ .

  • Khi điều này là sử dụng trong một biểu hiện chính trong một phương pháp dụ hoặc dụ accessor của một cấu trúc, nó được phân loại như là một biến . Loại biến là loại cá thể (§10.3.1) của cấu trúc trong đó việc sử dụng xảy ra.
    • Nếu phương pháp hoặc accessor không phải là một iterator (§10.14), biến này đại diện cho struct mà phương pháp hoặc accessor được gọi, và cư xử giống hệt như một ref tham số loại cấu trúc.
    • Nếu phương pháp hoặc accessor là một iterator, các biến này đại diện cho một bản sao của struct mà phương pháp hoặc accessor được gọi, và hoạt động chính xác giống như một tham số giá trị của struct kiểu.
+0

Cảm ơn rất nhiều, tôi đi qua cùng một phần sau khi thêm câu hỏi của tôi.Tôi nên đã kiểm tra các đặc điểm kỹ thuật trước khi đặt câu hỏi. –

+0

Không sao cả - mọi thứ có vẻ dễ dàng khi bạn biết. :) –

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