2011-11-16 43 views
6

Như tôi đã biết, mọi thứ bắt nguồn từ đối tượng ngoại trừ giao diện trong .net. Nhưng tôi nhận thấy rằng khi tôi nhấn "." sau tên giao diện Phương thức equals xuất hiện. Và khi tôi nhấn F12 cho phương thức equals, nó hướng tới phương thức equals trong lớp đối tượng. Nếu các giao diện không xuất phát từ lớp đối tượng, thì bằng phương thức nào đến từ đâu?Bằng phương pháp trong giao diện

Trả lời

1

giao diện chỉ có thể ở trên các đối tượng.

+0

Tôi không tin điều này sẽ trả lời rõ ràng câu hỏi. – ChaosPandion

2

Bất kỳ loại nào sẽ triển khai giao diện cuối cùng đều xuất phát từ đối tượng, do đó Equals luôn được xác định.

+0

Tại sao phương thức ToString() không có sẵn? –

+2

Nó có sẵn. –

14

Từ phần 13,2 của C# 4 spec:

Lưu ý rằng các thành viên trong đối tượng lớp không, nói đúng ra, các thành viên của giao diện bất kỳ (§13.2). Tuy nhiên, các thành viên trong lớp đối tượng có sẵn thông qua tra cứu thành viên trong bất kỳ loại giao diện (§7.4).

Và phần 7.4:

  • Đầu tiên, một tập hợp của các thành viên truy cập tên là N được xác định:
    • ...
    • Nếu không, các thiết lập bao gồm tất cả các truy cập (§ 3.5) các thành viên có tên là N trong T, bao gồm các thành viên được thừa kế và các thành viên có thể truy cập có tên là N trong đối tượng. [...]

Và phần 7.4.1:

Đối với mục đích tra cứu viên, một kiểu T được coi là có các loại cơ sở sau đây:

...

• Nếu T là kiểu giao diện, các kiểu cơ sở của T là các giao diện cơ sở của T và đối tượng kiểu lớp.

Về cơ bản nó là một kẹo mềm, để cho trình biên dịch hiểu rằng các thành viên của object sẽ luôn thực sự có sẵn tại thời gian thực hiện, mặc dù họ không thực sự thành viên của kiểu của biểu thức có liên quan cho các giao diện.

+0

+1 john cho đặc tả kỹ thuật số C# 4 ...... –

+0

Thêm vào đó chỉ có ý nghĩa khi có các thành viên này. – ChaosPandion

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