2013-01-25 31 views
5

Tôi biết có một cuộc tranh luận/ý kiến ​​về việc sử dụng this từ khóa hoặc nhấn liên quan đến lĩnh vực tư nhân/tài sản (và tôi sẽ đề cập đến, tôi bị mắc kẹt trên .NET 2.0)ước đặt tên trong C# - Biến toàn cầu

Cá nhân, tôi thích this, nhưng có những lúc bạn không thể sử dụng nó, ví dụ khi bạn cần tham chiếu biến toàn cầu từ bên trong một phương thức tĩnh. Vâng, sau đó chúng tôi buộc phải sử dụng gạch dưới (giả sử chúng tôi chỉ có 2 lựa chọn, this hoặc gạch dưới). Điều này có nghĩa là nếu lớp của tôi sử dụng bất kỳ phương pháp tĩnh nào tôi không thể sử dụng this trong toàn bộ tài liệu.

Bây giờ, tôi đã đọc naming guidelines và sử dụng StyleCop, cả hai thay vì tôi không sử dụng dấu gạch dưới, nhưng Resharper của tôi khá nhiều nhấn mạnh vào việc sử dụng _.

Tôi không cảm thấy đúng khi có một lớp sử dụng _ và lớp tiếp theo sử dụng this chỉ đơn giản là để thích ứng khi các lớp kết hợp các phương thức tĩnh và tĩnh! Lời khuyên ở đây trên SO là để giữ cho một triển khai/phong cách nhưng tôi không biết nếu điều đó có nghĩa là tôi nên bỏ qua Microsoft (và tôi biết MS không phải luôn tuân thủ các quy tắc của riêng họ)!

Nó đã được đề xuất để tiền tố với một cái gì đó khác, tương tự như Hungary nhưng tiền tố với globVariableName nơi glob chỉ ra toàn cầu. Tôi ghét ý tưởng này, nó quá bespoke và sẽ không được rõ ràng cho bất kỳ nhà phát triển khác bên ngoài nhóm của tôi.

Vì vậy, câu hỏi của tôi là, cách tốt nhất để xác định biến toàn cục là gì? Vì chúng là hướng dẫn đặt tên, có thể tôi chỉ có thể bỏ qua (ít nhất _ có thể được sử dụng nhất quán nhưng cảm thấy sai khi bỏ qua lời khuyên từ những người tạo ngôn ngữ).

+0

Trong C++ 'm_' là 'ước', ước trong losest ý nghĩa của thuật ngữ ... – MoonKnight

+0

Với 'biến toàn cầu', tôi đoán bạn có nghĩa là biến được bảo vệ hoặc riêng tư là 'tĩnh' hoặc' const'. Nếu đó là trường hợp, họ đi với PascalCase, nếu họ là tư nhân/bảo vệ họ không nên. Tôi không thấy bất kỳ xung đột nào ở đó. – istepaniuk

+0

Tôi không thấy làm thế nào điều này không thể biến thành một cuộc thảo luận mở rộng. Tôi khuyên bạn nên đặt câu hỏi này trên http://programmers.stackexchange.com/ vì bạn không có câu hỏi ** cụ thể ** về mã của riêng bạn. Tôi phải đặt câu hỏi thiết kế lớp học của bạn nếu bạn phải có biến để tham chiếu một đối tượng trong một phương thức tĩnh. Dường như là phương thức tĩnh nên một tên biến mô tả bất kỳ đối tượng hợp lệ nào. ** Nói cách khác, có lẽ sử dụng biến toàn cầu trong trường hợp như thế này là toàn bộ vấn đề. ** –

Trả lời

1

Bằng cách biến toàn cục, tôi giả sử bạn có nghĩa là const hoặc static lĩnh vực

tôi điều StyleCop sử dụng để khuyến khích bạn sử dụng ClassName.staticField cho staticconst lĩnh vực, nhưng nó dường như đã giảm quy tắc đó, ít nhất là theo mặc định. Đó vẫn là một cách hay để làm điều đó.

Ngoài ra, bạn có thể định cấu hình Chia sẻ lại để phát độc đáo với StyleCop.

2

Chỉ cần sử dụng tên lớp giống như cách bạn sử dụng "this", trong lớp tĩnh. Ví dụ sau:

public static class MyStatic 
{ 
    public static object Global; 

    public static void SomeMethod() 
    { 
     var theGlobal = MyStatic.Global; 
    } 
} 

public class MyNonStatic 
{ 
    public object Global; 

    public void SomeMethod() 
    { 
     var theGlobal = this.Global; 
    } 
} 

Lưu ý: Tôi thực sự không thể nghĩ ra cách nào khác để làm điều đó.

+0

tên loại nên đi trong PascalCase. – istepaniuk

+0

PascalCase đã sửa – Alex

0

đây chỉ là ý kiến ​​cá nhân của tôi;

  • Tôi tin rằng việc sử dụng this cho mỗi biến riêng tư là rất hữu ích; nó có tác động tích cực đến khả năng đọc của mã. Ngoài ra, khi bạn đang sử dụng một số phương pháp tiêm DI constructor, nó cho phép bạn sử dụng cùng một biến mà không có bất kỳ sự nhầm lẫn, mà có vẻ rất thích hợp.

    public void SomeMethod(int someVariable) 
    { 
        this.someVariable = someVariable; 
    } 
    
  • Tôi thích this thay vì gạch dưới; gạch dưới có vẻ khá thoáng qua; nhưng đề cập đến các ví dụ trước nó có tác động tiêu cực đến khả năng đọc.

  • Tôi đặt tên biến tĩnh giống như cách tôi đặt tên biến lớp; việc sử dụng từ khóa this làm giảm nguy cơ nhầm lẫn giữa các biến riêng tư và tĩnh.

0

Tôi luôn sử dụng dấu gạch dưới cho cả biến tĩnh và biến mẫu.

Đối với các biến Ví dụ tôi sử dụng this.variable

Đối static biến i, đôi khi, tiền tố họ với tên của lớp, ví dụ, ClassName.variable