2015-02-09 12 views
24

Trong C# 6.0 mới, chúng ta có thể xác định phương thức và thuộc tính bằng cách sử dụng biểu thức lambda.Thành phần hàm biểu hiện thân hiệu quả và hiệu suất trong C# 6.0

Ví dụ khách sạn này

public string Name { get { return First + " " + Last; } } 

bây giờ có thể được định nghĩa như sau:

public string Name => First + " " + Last; 

Các thông tin về thành viên chức năng biểu hiện boided bạn có thể tìm thấy ở đây: http://blogs.msdn.com/b/csharpfaq/archive/2014/11/20/new-features-in-c-6.aspx

Có ai biết nếu có bất kỳ chi phí nào khi sử dụng cú pháp mới? Nó có thể làm chậm (hoặc cải thiện hiệu quả của) ứng dụng hoặc có thể nó không quan trọng?

+10

Đó chỉ là đường cú pháp, nó không ảnh hưởng đến mã được tạo ra. Sử dụng ildasm.exe để thuyết phục bản thân. –

+1

Tôi không biết tính năng này, nhưng tôi khá chắc chắn rằng mọi đường cú pháp chỉ được biên dịch thành cùng một mã. Vì vậy, không có sự khác biệt về hiệu năng thời gian chạy. –

Trả lời

53

Trong C# 6.0 mới, chúng tôi có thể xác định phương pháp và thuộc tính bằng cách sử dụng biểu thức lambda.

Không, bạn không thể. Bạn có thể xác định các đối tượng phương thức và thuộc tính bằng cách sử dụng cú pháp mà trông như một biểu thức lambda, ở chỗ nó sử dụng mã thông báo =>.

Tuy nhiên, quan trọng là điều này không không có nghĩa là có loại đại biểu có liên quan. (Trong khi một biểu thức lambda chỉ được cho phép trong một ngữ cảnh mà nó được chuyển đổi thành một cây biểu thức hoặc loại đại biểu.)

Đây hoàn toàn là cú pháp. Hai đoạn mã ví dụ của bạn sẽ biên dịch thành chính xác cùng một IL. Đó là chỉ một cách khác để đại diện cho nội dung của trình khởi động hoặc phương thức thuộc tính.

+0

Thực tế là chúng biên dịch với chính xác IL được bảo đảm hay nó là một chi tiết thực hiện? Ví dụ, tôi tự hỏi nếu một số trình biên dịch có thể chọn trong tương lai để thực thi một nội tuyến nhấn mạnh là trường hợp như vậy, miễn là các yêu cầu cơ bản cho nội tuyến được đáp ứng (phi ảo)? – Kryptos

+0

@Kryptos: Nếu nó có giá trị đối với các thành viên thân, chúng tôi hy vọng nó sẽ hợp lệ cho các thành viên thông thường. Tôi nghi ngờ rằng chúng ta sẽ thấy bất kỳ đảm bảo về IL là spec rất hiếm khi nói về IL ... Nhưng spec có thể nói hai là tương đương. –

6

Chúng sẽ biên dịch xuống cùng một IL, bạn luôn có thể tự kiểm tra điều này bằng cách thực hiện và sử dụng ildasm để trích xuất IL.

0

Cú pháp này cho phép các thành viên được viết đơn giản hơn theo kiểu biểu thức lambda. Đó là sự khác biệt duy nhất.

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