2014-04-17 11 views
7

Tại sao nó using namespace std; được coi là thực hành kém trong C + +, nhưng using System; được coi là thực hành tốt trong C#? Họ có vẻ tương tự (đưa các công cụ thư viện chuẩn vào không gian tên chung).sử dụng Hệ thống; trong C# vs sử dụng namespace std; trong C++

+2

Ai nói rằng thực hành tốt trong C#? – Ben

+1

Tôi cho rằng 'sử dụng không gian tên std;' là tốt trong các tệp triển khai; chỉ cần giữ nó ra khỏi tập tin tiêu đề. Tuy nhiên, có những lựa chọn thay thế đẹp hơn và rõ ràng hơn như 'using std :: cout;' thay vào đó. – Suedocode

+0

bản sao có thể có của [Tại sao "sử dụng không gian tên std;" coi là hành vi xấu?] (http://stackoverflow.com/questions/1452721/why-is-using-namespace-std-considered-bad-practice) – Deduplicator

Trả lời

1

Vì C# không có chức năng tự do.

Vấn đề với using namespace std trong C++ là khi trình biên dịch đột nhiên quyết định gọi std:: chức năng thay vì chức năng của bạn mà không phải là đáng ngạc nhiên với những cái tên như count, distance hoặc find là chức năng mẫu mà phải mất bất cứ thứ gì.

Vấn đề này ít hơn nhiều trong C# vì C# không có chức năng tự do và có chuyển đổi ngầm chặt chẽ hơn (ví dụ: bạn không thể chuyển số int đến hàm mong đợi con trỏ).

17

Trong C#, chỉ thị using chỉ tác động đến phạm vi tệp hoặc không gian tên mà nó được đặt.

Nếu bạn bao gồm using namespace std; trong tệp tiêu đề C++, nó không chỉ tác động đến tệp đó mà là mọi tệp có chứa tệp đó. Điều này tạo ra tiềm năng xung đột trong các tệp của người khác.

Bạn có thể dễ dàng cho rằng đó không phải là "thực hành tốt nhất" trong C#, nhưng rủi ro liên quan thấp hơn đáng kể so với C++ vì nó chỉ tác động đến phạm vi tệp hoặc không gian tên nơi đặt chỉ thị.

+2

Bất cứ nơi nào OP nói về puttig nó vào tiêu đề của mình? Nên thêm một số đối số cho tệp triển khai ... – Deduplicator

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