2010-10-27 29 views
11

thể trùng lặp:
Use of var keyword in C#var vs tuyên bố rõ ràng

Hi, Chỉ cần di chuyển công việc và tôi đang sử dụng để sử dụng var rất nhiều. Tại công việc trước đây của tôi, chúng tôi đã làm rất nhiều TDD và sử dụng resharper. Trong công việc này, họ ghét các công cụ của bên thứ ba và các nhà phát triển ở đây nói rằng không nên sử dụng var tất cả thời gian và nó không hiệu quả bằng cách gõ rõ ràng.

Một số thời gian trước đây tôi nghĩ như vậy nhưng bây giờ tôi đã nhận được như vậy được sử dụng để nó, và nó làm cho mã của tôi nhìn gọn gàng hơn.

Tôi đã đọc một số bài đăng và có vẻ như có sự nhầm lẫn dù nó có hiệu quả hay không. Tôi đọc rằng việc sử dụng var sẽ tạo cùng một mã IL. Vậy nó có nên không hiệu quả không? Một nơi khác tôi đọc rằng mặc dù sử dụng var sản xuất cùng một mã IL nó phải tìm ra loại đó là gì. Vậy 'suy ra' thực sự có ý nghĩa gì?

Một số làm rõ về việc liệu hiệu suất thông minh có giống nhau hay không sẽ là tuyệt vời.

+0

"Trong công việc này, họ ghét công cụ của bên thứ ba", tôi đã từng là một trong những người, vì lợi ích của sự tỉnh táo và làm quan trọng hơn mọi thứ với thời gian của tôi và làm cho việc quản lý mã dễ dàng hơn/sạch hơn và nhất quán không thể sử dụng Resharper hoặc bất kỳ công cụ của bên thứ 3 nào sẽ mang lại lợi thế. Chỉ ghét việc sử dụng cái gì đó không phải là lý do để ngăn người khác sử dụng nó. – Arjang

Trả lời

32

Xét về hiệu suất thời gian thực hiện, nó không tạo ra sự khác biệt. Nó thực sự được biên dịch thành chính xác cùng một IL. Biến sẽ vẫn được nhập tĩnh, chỉ là loại được suy ra từ biểu thức khởi tạo.

"Được suy ra" có nghĩa là "làm việc từ các thông tin khác". Vì vậy, nếu khai báo là:

string x = "hello"; 

biến xrõ ràng tuyên bố là loại string. Trình biên dịch không phải làm việc gì cả. Nếu bạn sử dụng var:

var x = "hello"; 

sau đó trình biên dịch phát hiện các loại thời gian biên dịch của biểu thức được phân công, và làm cho rằng kiểu của biến. x vẫn được biết là một biến chuỗi ở mọi nơi khác trong mã.

Nếu nhà phát triển bạn đang làm việc với suy nghĩ rằng var hoạt động linh hoạt, tôi sẽ rất thận trọng về thông tin khác mà họ cho bạn biết. Bạn có thể muốn kín đáo đề nghị rằng họ tìm hiểu thêm một chút về cách các tính năng ngôn ngữ mới hoạt động trước khi đánh giá chúng.

Về mặt hiệu suất nhà phát triển, đó là một câu hỏi khó hơn nhiều để đánh giá. Cá nhân tôi sử dụng varkhá một chút - đặc biệt là trong các thử nghiệm - nhưng không phải ở mọi nơi.

+0

cảm ơn rất nhiều cho câu trả lời rất chi tiết.Thực sự đánh giá cao nó.Tôi không sử dụng ở khắp mọi nơi nhưng chỉ làm cho cuộc sống dễ dàng hơn và như bạn đã chỉ ra không có hiệu suất khác biệt khôn ngoan thì tại sao không.Thanks một lần nữa cho thời gian của bạn – user9969

+0

Vì vậy, nó sẽ là chính xác để nói có một lợi ích hiệu suất _compilation_ rất nhỏ cho việc sử dụng các biến được đánh một cách rõ ràng so với sử dụng var? (Làm cho cảm giác rằng hiệu suất thời gian chạy sẽ giống hệt nhau.) – paz

+0

@Edgar: Tôi không muốn nói về lợi ích hiệu suất biên dịch. Nếu chúng tồn tại chút nào, tôi nghi ngờ rằng chúng có thể đo lường được với mã hợp lý, và tôi sẽ không muốn dự đoán cách mà lợi ích sẽ đi mà không có bất kỳ bằng chứng nào. –

6

var được chuyển thành loại chính xác trong thời gian compilation .không có vấn đề về hiệu quả theo kiến ​​thức của tôi.

IL cho mã này được hiển thị dưới đây:

class Foo 
    { 
     void Bar() 
     { 
      var iCount = 0; 
      int iCoount1 = 0; 
     } 
    } 

alt text

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