2010-01-22 30 views
7

Tôi đang cố gắng xem xét các tiêu chuẩn mã hóa C# để làm cho mã của tôi đẹp hơn và chuẩn, và tôi có một câu hỏi: Các hàm (các phương thức không phải là khoảng trống), theo tiêu chuẩn mã hóa C#, nên bắt đầu bằng "Get "? Ví dụ: "GetSongOrder()", "GetNextLine()" v.v ...?Chức năng nên bắt đầu bằng "Nhận"?

Cảm ơn.

+5

Tiêu chuẩn nào? –

+1

http://www.google.co.il/search?q=C%23+Coding+Standards&ie=utf-8&oe=utf-8&aq=t&rls=org.mozilla:en-US:official&client=firefox-a –

+0

@ Alan chỉ hiển thị rất nhiều "tiêu chuẩn" mã hóa khác nhau – leeeroy

Trả lời

24

Có hai trường hợp:

Nếu thói quen có thể "nhận được" giá trị rất nhanh chóng, không gây tác dụng phụ trong các mã, tôi khuyên bạn nên sử dụng một getter tài sản, và bỏ qua "nhận được" và tên:

public SongOrder SongOrder 
{ 
    get { return this.songOrder; } // ie: an enum 
} 

Nếu, tuy nhiên, có yêu cầu xử lý, thì phương thức có tên "Get ..." là phù hợp. Điều này cho thấy rằng có thể có tác dụng phụ để gọi phương pháp này, chẳng hạn như xử lý thêm, hoặc một sự thay đổi trong một số trạng thái:

public string GetNextLine() 
{ 
    string line = this.stream.ReadLine(); // This may cause a longer running operation, especially if it's using Disk IO/etc 
    // do other work? 
    return line; 
} 
+1

Mô tả rất hay. Suy nghĩ của tôi chính xác - Thuộc tính không bao giờ nên sử dụng quy ước Verb-Noun, và chỉ nên là Danh từ. Các phương thức phải luôn là Verb-Noun. –

+0

Cảm ơn bạn đã trả lời, nhưng ý tôi là bạn nên chọn "GetNextLine" hoặc "ReadLine" chẳng hạn. –

+0

@Alon: GetNextLine và ReadLine có thể giống nhau hoặc chúng có thể khác nhau - không rõ ràng ngay lập tức. Nếu bạn đang đọc từ một tập tin, sử dụng "ReadLine". Nếu bạn đang nhận được một dòng từ một chuỗi trong bộ nhớ, sử dụng "GetNextLine". – FrustratedWithFormsDesigner

1

Tôi chưa thấy tiêu chuẩn C# về điều đó, nhưng hầu hết mã thực tế Tôi đã thấy các thuộc tính "getter" được viết bằng văn bản và bỏ qua từ "Nhận" từ tên hàm. Ví dụ:

Public SongOrderList SongOrder 
{ 
    get 
    { 
     return mySongOrderList; 
    } 
} 

Sử dụng "Get" (và "Set") như là một tiền tố tên hàm là một cái gì đó tôi thường thấy trong langauges mà không có tính a la NET (ngôn ngữ như C, Java) .

Edit:

... và tất nhiên bạn có thể có setters quá

Public SongOrderList SongOrder 
{ 
    get 
    { 
     //do some processing code here 
     return mySongOrderList; 
    } 
    set 
    { 
     //do some processing code here 
     mySongOrderList = value; //value is a C# keyword, in case you didn't know. it is the parameter to the setter 
    } 
} 

Tất nhiên, nếu bạn muốn có một phương thức getter và setter và bạn không cần bất kỳ chế biến thêm , chỉ cần tinh khiết Java đậu giống như get/set youc một làm điều này:

Public SongOrderList SongOrder 
    { 
     get; set; 
    } 

Nếu bạn chỉ muốn có một getter CÔNG bạn có thể làm điều này (tôi nghĩ - nó được một lúc):

Public SongOrderList SongOrder 
    { 
     public get; private set; 
    } 
+0

Đánh tôi với nó. :) Tôi nghĩ xu hướng muốn sử dụng 'Get' xuất phát từ việc sử dụng thường xuyên các cặp GetFoo()/SetFoo (value) của Java. Trong C# chúng ta thường bọc chúng trong một tài sản, Foo. – JMD

+0

và nếu có thông số? –

+1

Không phải luôn luôn đúng, mặc dù - Nếu có những tác dụng phụ để gọi điều này, nó tốt hơn như một phương pháp có tên là "Get", IMO. –

2

Tên hàm của bạn nên ngắn gọn và có ý nghĩa. Không hơn không kém.

Nếu làm việc cho bạn, hãy sử dụng Nhận. Nếu Retrieve hoạt động, hãy sử dụng nó.

Không có "tiêu chuẩn" thực sự cho các quy ước đặt tên.

+2

Tôi sẽ nói "Tên hàm phải gọn gàng nhất có thể trong khi vẫn tự mô tả" - Đừng đi quá ngắn;) –

2

Nói chung, quy ước đặt tên Verb-Noun cho Hàm là phổ biến. 'Nhận' chỉ là một trong những động từ bạn có thể thấy. Nó cũng có thể là 'Kích hoạt', 'Đóng', 'Dump', hoặc bất cứ điều gì ... nó chỉ là một hệ quả của tiếng Anh và chung mã hóa rằng một phương pháp hoặc chức năng thường sẽ 'Làm một cái gì đó' để 'Một số loại đối tượng (s) '.

1

Không, không có tiêu chuẩn hàm nên bắt đầu với "Nhận".

Khi tạo tên hàm hợp lý, chúng thường có dạng như vậy, chẳng hạn như hàm GetHashCode. Các động từ khác ngay từ đầu là phổ biến, như trong hàm ToString và chỉ các động từ như trong hàm Encode.

Có các hình thức khác, nơi bạn mô tả kết quả của hàm, chẳng hạn như hàm Substring.

1

Ngoài các câu trả lời khác - nếu bạn có phương thức như GetNextLine(), bạn có thể muốn xem xét trả về một liệt kê thay thế, ví dụ:

IEnumerable<Line> GetLines();

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