it-swarm-vi.com

Làm thế nào để bạn đặt tên biến riêng tư của bạn trong C #?

Thực tiễn tốt nhất, quy ước đặt tên được chấp nhận phổ biến nhất cho các biến riêng tư trong C # là gì?

  1. private int myInteger;
  2. private int MyInteger;
  3. private int mMyInteger;
  4. private int _myInteger;
  5. private int _MyInteger;
  6. Tùy chọn khác bí ẩn

Bạn sử dụng cái nào và tại sao? (Công ty của tôi khá mới đối với C # và tôi muốn chọn phương thức "được chấp nhận nhất trong ngành" để thử và đi vào tiêu chuẩn mã hóa của chúng tôi.)

25
Vaccano

Các hướng dẫn thiết kế lớp MSDN http://msdn.Microsoft.com/en-us/l Library/tt31s3bc.aspx đề xuất tùy chọn 1 - myInteger.

Tôi đã luôn luôn sử dụng phong cách này. Tôi không thích cá nhân cho nhân vật _.

44
btlog

Tôi sử dụng tùy chọn # 4 ở trên:

private int _myInteger;

Tôi muốn có một số dấu hiệu của phạm vi trong tên biến của mình và dấu gạch dưới là đủ cho mục đích đó. Nó cũng khá dễ đọc.

25
Matt Dillard

Tôi sử dụng sơ đồ đặt tên sau:

  • 1st (myInteger) cho các biến phạm vi cục bộ
  • Thứ 2 (MyInteger) cho các tài sản công cộng
  • thứ 4 (_myInteger) cho các biến riêng tư
16
Zafer

Tôi nghĩ rằng tùy chọn 4 thực sự là tùy chọn dễ đọc nhất. Nó giúp bạn khỏi phải làm điều này:

public Person(string name, int age) 
{
    this.name = name;
    this.age = age;
}

Nó cũng làm cho tất cả các thành viên tư nhân đáng chú ý hơn. Trong ví dụ sau, cái quái gì age đến từ đâu? Nếu không có vòng loại this thì khó có thể nói được.

private void Method()
{
    var x = 2;
    var y = age + x;
}

Đây là cách dễ hiểu hơn:

private void Method()
{
    var x = 2;
    var y = _age + x;
}
14
ChaosPandion

Trước hết, PascalCasing thường được dành riêng cho các thuộc tính công cộng, hằng, phương thức, v.v. của lớp. Vì vậy, tôi sẽ bỏ qua 2 và 5.

Thứ hai, ký hiệu tiếng Anh không được khuyến khích trong thế giới .NET, vì vậy (uh, tôi nghĩ) 3 là đúng. Giả sử đó là những gì đang xảy ra với 3.

Điều đó rời đi với camelCasing và _camelCasing. Tôi thường sử dụng _camelCasing cho các biến lớp và camelCasing cũ đơn giản cho các biến nằm trong phạm vi của một phương thức hoặc hẹp hơn. Vỏ lạc đà là tiêu chuẩn được chấp nhận được sử dụng cho các đối số phương thức, tên biến được bảo vệ/riêng và các biến trong phạm vi phương thức hoặc phạm vi hẹp hơn.

Tôi cũng muốn trả trước với dấu gạch dưới để các biến riêng tư của tôi được nhóm trong intellisense của tôi. Tuy nhiên, tôi chỉ làm điều này cho các biến trong phạm vi một loại. Các biến được khai báo trong một phương thức hoặc phạm vi hẹp hơn tôi bỏ dấu gạch dưới. Làm cho nó dễ dàng để giữ chúng tách biệt và giữ các biến ít được sử dụng cùng nhau.

10
Ripped Off

private int integer

Nếu bạn bị lẫn lộn giữa các biến thành viên và biến cục bộ trong phạm vi phương thức thì có lẽ bạn cần phải cấu trúc lại.

4
Ryan Roberts

Tôi thực hiện tùy chọn số 4 vì đó là giao diện của SSCLI, nhưng thực lòng tôi không quan tâm lắm đến việc đặt tên biến riêng. Công chúng là một câu chuyện khác nhau.

BTW bạn đã quên m_MyInteger

2
Conrad Frix

Tôi sẽ không gọi nó là "của tôi" bất cứ điều gì!

Nhưng tôi muốn nói

class C
{
     int VariableName { get; set; }
}

khá thường xuyên điều này là tốt hơn so với có các biến rõ ràng. Nếu tôi có một biến riêng rõ ràng, tôi sẽ gọi nó là int _variableName;

2
CJBrew

Tôi tin rằng cách tốt nhất để làm điều đó (trong C # /. Dù sao đi nữa) là sự kết hợp của 2 và 6:

private int MyInteger { get; set; }

Về mặt lý thuyết không có biến nào ở đây, nhưng nó trông và hoạt động như một biến cá thể. Nếu chúng ta cần thêm một số logic kinh doanh vào giá trị đó (đó là một giá trị hoàn toàn bên trong, vì vậy chúng ta có thể làm bất cứ điều gì chúng ta muốn sau đó) thì đó đã là 'tài sản hóa' đối với chúng ta. Một chén hấp nóng của chiến thắng!

2
Task

với dấu gạch dưới.

Bill Wagner giải thích lý do tại sao C # hiệu quả . Nhưng tôi sẽ không bao giờ đặt tên cho một số nguyên my Số nguyên , tốt hơn là một cái gì đó như _age hoặc _length. Bao gồm TypeName trong tên ví dụ là một thực tế khủng khiếp. Tên phải tự giải thích và vì C # là loại An toàn có thể được tìm thấy mọi lúc.

1
Caspar Kleijne

Trong C++, tôi có xu hướng sử dụng _ vì tôi chuyển đổi các trình soạn thảo rất nhiều, điều đó không cho phép tôi xem nó có riêng tư không.

Đối với C #, tôi có xu hướng rời khỏi _ vì Visual Studio cho phép tôi xem nó có riêng tư không.

Tôi có xu hướng sử dụng cách Camel Case để làm điều này.

1
Tamara Wijsman

Bạn cần đưa ra một ví dụ cụ thể hơn, nhưng:

private int count, private int badFileCount, private static readonly int ReconnectAttemptsLimit

Nhân tiện, bạn nhận được tất cả điều này MIỄN PHÍ khi bạn cài đặt và bắt đầu sử dụng bản mới nhất và lớn nhất MSFT Stylecop.

1
Job

Tôi sử dụng 4 (private int _myInteger;) bởi vì:

private int myInteger;

Đây là cách tôi đặt tên cho các biến cục bộ của mình.

private int MyInteger;

Đây là cách tôi đặt tên hằng.

private int mMyInteger;

Đây không phải là phong cách C #.

private int _MyInteger;

Điều này có vẻ lạ.

1
Victor Hurdugaci

Tôi có tên ReSharper, các biến của tôi, không chỉ của tôi mà mọi người khác cũng làm điều này. Có một số lượng lớn nhất quán máng dự án.

0
Sevki

Tôi đi theo tùy chọn 5: private int _MyFoo

Tôi không thấy bất kỳ lợi thế cạnh tranh thực sự nào so với _myFoo.

0
mafu

Tiêu chuẩn mã hóa C # của Juval Lowy khá phổ biến. Tiêu chuẩn này khuyến nghị tiền tố các biến thành viên riêng với "m_" (Tùy chọn 6). Đó là những gì chúng tôi làm trong nhóm của chúng tôi.

private int m_myInteger;

Tùy chọn 4 (_myInteger) là một biến thể chấp nhận được của tiêu chuẩn này.

Tôi không thích đề xuất MSDN (myInteger), vì điều đó gây khó khăn khi nói với một thành viên tư nhân từ một biến cục bộ. Tất nhiên, đề xuất của họ giải quyết vấn đề này bằng cách đủ điều kiện cho các thành viên tư nhân với this, có vẻ như là dư thừa đối với tôi.

0
azheglov

Sử dụng camelCasing cho các biến riêng tư như myInteger

Xem xét _ Trước đó nếu biến là bản sao lưu cho một thuộc tính để giảm sự nhầm lẫn-
[.__.] Biến _myProperty Cho thuộc tính MyProperty

0
Gulshan