2009-08-05 48 views
7

1) Chính sách khai báo biến là gì? Nếu bạn luôn luôn hãy sử dụng từ khóa private hoặc bạn có thể bỏ qua nó không?Một vài câu hỏi quy ước đặt tên C#

string MyVar1; 

vs

private string MyVar1; 

Lý do duy nhất tôi thấy là Microsoft một ngày nào đó có thể thay đổi bổ truy cập mặc định để public thay vì private.

Trường hợp có nói rằng riêng tư là tùy chọn không? Mọi tham chiếu đến MSDN?

2) Chính sách đặt tên cho hằng số?

Tôi đã luôn luôn sử dụng mũ khi viết một hằng số, nhưng một người bạn nói với tôi rằng nó chống lại chính sách đặt tên của Microsoft, phải không?

const string MYVAR1; 

vs

const string myVar1; 

3) Pascal hoặc Camel?

Cá nhân tôi nghĩ rằng Camel trông có vẻ xấu xí.

+2

Chỉ là một gợi ý, nhưng bạn có thể muốn trả lời câu hỏi này với thông tin hơn 'Một vài câu hỏi # C' để người dùng SO trong tương lai có thể tìm thấy những gì họ cần. Lý tưởng nhất, đây sẽ là ba câu hỏi SO khác nhau, mặc dù tôi chắc chắn một số câu hỏi đã được hỏi trước đây. – romandas

+0

Điểm tốt, tôi đã thay đổi tiêu đề để chỉ rõ bản chất của các câu hỏi – Patrick

+0

Nhân tiện, THESE_CONSTANT_VARIABLES là quy ước trong C++. (Và như các câu trả lời được đề cập, không phải trong C#) – MasterMastic

Trả lời

22

1) Từ khóa private là tùy chọn. Tôi rất nghi ngờ rằng Microsoft sẽ bao giờ thay đổi khả năng hiển thị mặc định của các lĩnh vực vì đây sẽ là một thay đổi lớn, phá vỡ (không phải đề cập đến một ngu ngốc). Bỏ qua từ khóa private chỉ là vấn đề sở thích cá nhân.

2) Không sử dụng hằng số "shouty" - tuân theo quy ước của khung và sử dụng vỏ pascal (ví dụ: ThisIsAConstant thích hợp hơn THIS_IS_A_CONSTANT).

+4

Tôi muốn thêm rằng trong khi riêng tư là tùy chọn, ít nhất là nhất quán trong cơ sở mã của bạn. Đó là, sử dụng nó hoặc không sử dụng nó - không pha trộn. –

+28

I_AM_AN_OBNOXIOUS_CONSTANT_OOOOH_LOOK_AT_ME_THEN –

+1

Tôi vẫn không thể tìm thấy nơi nó nói rằng hằng số không nên được tất cả giới hạn. – Patrick

1

riêng tư là tùy chọn nhưng nhập thêm. Tôi thích bỏ qua nó.

Đối với các cấu phần, tùy thuộc vào sở thích của bạn và người bạn đang làm việc cùng. Nhưng khi nghi ngờ, hãy nhìn vào Khuôn khổ .NET và cách chúng đặt tên hằng số.

+0

Nhưng ở đâu được nêu trên trang web của Microsoft? Trường hợp nào nói rằng riêng tư là tùy chọn? Mọi người đều biết, nhưng nó được viết ở đâu? – Patrick

+0

@Patrick: bạn có thể xem thông số kỹ thuật ngôn ngữ C#: http://msdn.microsoft.com/en-us/vcsharp/aa336809.aspx –

1

tên trường cũng tin nên trong trường hợp lạc đà, optionaly với tiền tố _ hoặc m_:

 
    private int count; 
or 
    private string _name; 
or 
    private decimal m_price; 
+0

Tôi không thể tìm thấy bất kỳ nơi nào trên trang web của Microsoft. – Patrick

+1

Đó là một thực tế phổ biến - tất cả các lĩnh vực tư nhân trong các ví dụ MSDN là trường hợp lạc đà. – Ray

+0

Tôi đồng ý với Ray (+1) – Juri

1

tôi nghi ngờ Microsoft đang bao giờ sẽ thay đổi hành vi mặc định cho các biến thành viên C#. Tôi sẽ tuyên bố những điều riêng tư mà bạn muốn là riêng tư và tuyên bố rõ ràng mọi thứ công khai rằng bạn muốn công khai chỉ vì sự rõ ràng nếu không có gì khác.

Tôi nghĩ rằng quy tắc quan trọng cho hằng số là chỉ sử dụng quy ước đặt tên mà mọi người đồng ý và bạn nhận ra là hằng số. Nếu tất cả mọi người thích tất cả các trường hợp trên thì sử dụng nó. Nếu bạn muốn được tiêu chuẩn hơn mặc dù sử dụng Pascal vỏ.

+0

Tại sao Pascal không phải là Camel? – Patrick

0

1) Tôi có xu hướng sử dụng tư nhân, chỉ để được rõ ràng, nhưng có thực sự là không cần phải tôi đoán

2) Đó là sự thật, Microsoft khuyên bạn nên không sử dụng mũ cho hằng số.

gyuidelines quy ước đặt tên của Microsoft cho các thành viên có thể tìm thấy loại here

1

tin là không bắt buộc, vì vậy bạn có thể bỏ qua nó.

Tuy nhiên, nếu lớp học của bạn có sự kết hợp của các thành viên dữ liệu riêng tư, được bảo vệ và công khai, bạn nên chỉ định rằng thành viên là riêng tư vì mục đích dễ đọc.

0

Đây là một ebook miễn phí với C# và VB .net nguyên tắc mã hóa, nó rất tốt

Link to ebook download

Cá nhân, mặc dù tôi thích cách xác định một cách rõ ràng khi một cái gì đó là tư nhân, để có thể đọc, trên thực tế tôi rất được sử dụng để làm như vậy mà khi tôi không nhìn thấy nó tôi bị lẫn lộn. Đối với hằng số, tôi sử dụng PascalCasing.

5

Không trả lời trực tiếp câu hỏi của bạn, nhưng có thể bạn sẽ quan tâm đến số StyleCop của Microsoft. Đây là một công cụ để phân tích mã nguồn của bạn đối với các quy tắc về kiểu dáng và tính nhất quán. Theo mặc định, nó áp đặt các nguyên tắc tạo kiểu của Microsoft.

1

Cá nhân, tôi rất thích nó nếu các hằng số là ALL_CAPS như trong một số ngôn ngữ khác ... Tôi nghĩ rằng đó là cách nhanh chóng và dễ dàng để phát hiện các hằng số. Tuy nhiên, vì các hằng số khác được xây dựng trong khung công tác UsePascalCasing, bạn cũng nên làm như vậy. Tính nhất quán là rất quan trọng.

Theo như "Pascal vs. Camel", bạn gặp vấn đề tương tự. Nếu bạn chỉ là lập trình một mình, từ đầu, bạn có thể làm bất cứ điều gì bạn muốn. Nhưng kể từ khi bạn đang sử dụng một khuôn khổ từ trước, vì lợi ích của sự nhất quán, bạn nên thi đua cùng một phong cách. Ngoài ra, một khi bạn quen với nó, bạn có thể thấy rằng sau cùng một tập các quy tắc sẽ thực sự hữu ích, bởi vì bạn sẽ ngay lập tức biết rằng một cái gì đó là một tham số hoặc biến cục bộ (camelCasing) so với một thuộc tính hoặc hằng số (PascalCasing) .

1

Sử dụng vỏ Pascal trong tên trường.

Từ .NET Framework Developer's Guide Names of Type Members

Do sử dụng Pascal vỏ cho tất cả các công tên thành viên, chủng loại, và namespace gồm nhiều từ.

Lưu ý rằng quy tắc này không áp dụng cho trường mẫu. Vì các lý do là được nêu chi tiết trong Hướng dẫn thiết kế thành viên , bạn không nên sử dụng các trường hợp công khai .

Từ .NET Framework Developer's Guide Capitalization Conventions

Note chuẩn ngụ ý của Pascal vỏ trong đặt tên không đổi.

Sử dụng các trường không đổi cho các hằng số sẽ không bao giờ thay đổi.

Trình biên dịch ghi các giá trị của các trường const trực tiếp vào mã gọi. Do đó, giá trị const không bao giờ có thể là thay đổi mà không có nguy cơ vi phạm khả năng tương thích .

public struct Int32 { 
    public const int MaxValue = 0x7fffffff; 
    public const int MinValue = unchecked((int)0x80000000); 
} 

Từ Khung Thiết kế Hướng dẫn: ước, thành ngữ, và Patterns cho Reusable NET thư viện, trang Second Edition 161

tôi không thể tìm thấy bất kỳ tài liệu tham khảo để xem bạn có nên trang trí các lĩnh vực riêng với thuật ngữ tin . đó là nhiều hơn một sự lựa chọn phong cách nội bộ tôi sẽ giả định. Bạn đã bao giờ chọn bạn sẽ muốn duy trì sự nhất quán.

0

Bạn cũng có thể quan tâm đến Internal riêng của Microsoft Nguyên tắc mã cho .NET Framework, như revealed by Brad Abrams in his blog:

Làm theo tất cả Khung Hướng dẫn thiết kế .NET cho cả các thành viên nội bộ và bên ngoài. Điểm nổi bật của những bao gồm:

  • Không sử dụng ký hiệu Hungarian
  • Không sử dụng một tiền tố cho các biến thành viên (, m, s_, vv). Nếu bạn muốn phân biệt
  • giữa biến cục bộ và thành viên, bạn nên sử dụng "this". Trong C# và "Me" trong VB.NET.
  • Do sử dụng camelCasing cho các biến thành viên
  • Do camelCasing sử dụng cho các thông số
  • Do sử dụng camelCasing cho các biến địa phương
  • Do sử dụng PascalCasing cho chức năng, tài sản, sự kiện và tên lớp
  • Đỗ giao diện tiền tố tên với “tôi”
  • Đừng prefix enums, các lớp học, hoặc các đại biểu với bất kỳ thư
0

@ Dan Diplo # Do không t sử dụng tiền tố cho biến thành viên (, m, s_, v.v.). Nếu bạn muốn phân biệt # giữa biến cục bộ và thành viên, bạn nên sử dụng “this” trong C# và “Me.” Trong VB.NET.

Điều này rất đáng tranh cãi. Tiền tố giúp intellisense: bạn đặt tiền tố char và nhận được một danh sách chỉ các trường cá thể địa phương tư nhân. Với cái này. bạn sẽ nhận được một danh sách đầy đủ bao gồm các phương thức, trường, thuộc tính, sự kiện vv.

cũng xem xét sau Ví dụ:

private int _count; 
private int total; 
private decimal price; 

public MyClass(int count, int total, decimal price) 
{ 
    _count = count;  // correct 
    this.total = total; // correct 
    price = price;  // wrong! you forgot this. qualifier 
} 
+0

Thực ra, cá nhân tôi sử dụng dấu gạch dưới cho biến thành viên riêng (thói quen). Tôi đã chỉ ra những gì riêng của Microsoft nội bộ hướng dẫn mã hóa nhà nước. –

+0

Microsoft thực sự sử dụng tiền tố m_ cho các thành viên riêng của các lớp .NET FW. – Ray

0

Trong C# mặc định tầm nhìn đến khả năng hiển thị hạn chế nhất có thể.Nếu không có một modifier:

  • lớp phi bên trong là nội
  • lớp bên trong là tin
  • thành viên lớp là private

Bởi vì nó là một ý tưởng tốt để hạn chế tầm nhìn càng nhiều càng tốt dù sao, Tôi cố gắng để luôn luôn thoát khỏi công cụ sửa đổi nơi hiển thị mặc định là tất cả những gì tôi cần. Điều này làm cho những thành viên đó không phải là mặc định rõ ràng hơn, giúp tôi chú ý đến việc liệu chúng có thực sự cần phải hiển thị hay không.

Đối với các hằng số, sở thích của tôi sẽ đặt chúng vào lớp riêng của chúng để định dạng ClassName.ConstantName làm cho nó rõ ràng là gì.

Nói chung, tôi theo dõi Design Guidelines for Developing Class Libraries của Microsoft.

2

Khuyến nghị chính thức cho đặt tên consts theo hướng dẫn MS, vì không ai đã thực sự xác định nó hoàn toàn chưa là:

  • Sử dụng tất cả mũ cho tên với một hoặc hai nhân vật tức System.Math .PI, System.Math.E
  • Đối với mọi thứ bằng hoặc trên 3 ký tự, hãy sử dụng PascalCasing.