2016-11-04 18 views
7

Trong C# 6.0 bạn có thể viết này:Tại sao tên (đối tượng) không được phép?

var instance = default(object); 
var type = typeof(object); 

Họ có cùng một kết quả của:

var instance = default(System.Object); 
var type = typeof(System.Object); 

Nhưng bạn không thể viết này:

var name = nameof(object); 

Nó tạo ra sau lỗi:

Invalid expression term 'object'.

.210

Nhưng bạn vẫn có thể viết này:

var name = nameof(System.Object); 

Tại sao nameof(object) không biên dịch?

+2

Hãy thử: 'nameof (Object)' để thay thế. 'nameof()' không hoạt động trên các từ đồng nghĩa, chỉ trên các tên lớp ban đầu. –

+0

@CodeCaster, để lấy tên của lớp 'Object' là chuỗi –

+1

@CodeCaster Jeroen là đúng. Hãy thử nó nếu bạn không tin điều đó. – hvd

Trả lời

14

Sự khác biệt là object là một từ đồng nghĩa của lớp Objectnameof() không hoạt động trên các từ đồng nghĩa.

Cùng áp dụng cho nameof(int) vs nameof(Int32)

+3

Tài liệu liên quan: https://msdn.microsoft.com/en-au/library/dn986596.aspx "Điều sau đây đáng nói đến là lỗi sản xuất: * các loại được xác định trước (ví dụ: int hoặc void) *" – Rob

+0

@Rob well đó là tham chiếu, chứ không phải đặc điểm kỹ thuật. Về mặt kỹ thuật, 'System.Object' là một kiểu đơn giản được xác định trước, và' object' bí danh của nó, do đó không nên làm việc theo mô tả đó ... – CodeCaster

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