2013-02-12 30 views
10

Có bất kỳ loại quy ước nào trong C# (hoặc bất kỳ ngôn ngữ hướng đối tượng nào hỗ trợ quá tải phương thức) cho tình huống sau đây không?Có quy ước đặt hàng tham số quá tải phương thức C# không?

phép nói rằng tôi có một phương pháp foo:

public void Foo(int a){//does stuff} 

Nhưng thực sự tôi có 3 phương pháp foo:

public void Foo(int a){} 
public void Foo(int a, double b){} 
public void Foo(float c, int a, double b){} 

Có một quy ước đó khẳng định có hay không thứ tự của các thông số vấn đề trong một phương pháp quá tải? Chú ý phương thức thứ 3 không tiến triển logic hợp lý như thế nào (a, b, c).

+1

Nếu 'a' luôn được yêu cầu và' b' là bắt buộc nếu 'c' được cung cấp, tôi sẽ làm như sau:' public void Foo (int a, double? B = null, float? C = null) '- giả sử logic của bạn là như nhau. – zimdanen

+0

@zimdanen, không có lý do gì để làm cho các tham số rỗng được – Maxwe11

+5

@Jupiter: Ý tưởng là sử dụng nó như là một thay thế cho quá tải. Nó hoạt động tốt khi có nhiều tham số tất cả đều độc lập - bạn tránh tăng gấp đôi số lượng quá tải mỗi khi bạn thêm một lần nữa. (Phải thừa nhận rằng khi bạn có khoảng 5 thông số, bạn nên cẩn thận xem liệu đây có phải là thiết kế phù hợp hay không ...) –

Trả lời

17

Có. Hãy xem https://msdn.microsoft.com/en-us/library/ms229029(v=vs.110).aspx

Làm nhất quán trong thứ tự các tham số trong các thành viên bị quá tải. Các tham số có cùng tên sẽ xuất hiện ở cùng vị trí trong tất cả các tình trạng quá tải.

+3

Và hơn nữa, bạn chỉ nên quá tải phương pháp cho mục đích cung cấp các giá trị mặc định cho một phương thức chung. Nếu không, các phương pháp không liên quan chặt chẽ đến mức có cùng tên và phải được đặt tên khác. –

1

Mặc dù không bắt buộc phải duy trì một thứ tự cụ thể, thường là một ý tưởng hay để làm như vậy, vì mục đích dễ đọc. Thứ tự của các tham số không quan trọng đối với chữ ký phương thức. Ví dụ:

public void DoStuff(int a, bool b, string c) 
{ 

} 

public void DoStuff(bool b, string c, int a) 
{ 

} 

hợp lệ và biên dịch tốt, mặc dù số lượng tham số và thậm chí cả tên của chúng đều giống nhau.

Cập nhật: Tôi sẽ không khuyên bạn nên thực hiện theo cách này. Nó có thể dẫn đến sự nhầm lẫn. Tôi chỉ nói rằng nó có giá trị về mặt kỹ thuật.

+0

Trong khi điều này là hợp lệ, nó sẽ là hoàn toàn khó hiểu cho những người sử dụng phương pháp. –

+0

Chính xác, đó là lý do tại sao tôi nói đó là một ý tưởng tốt để duy trì trật tự cho khả năng đọc. Cá nhân tôi sẽ không làm theo cách này. Tôi chỉ nói cho bản ghi rằng thứ tự các tham số không ảnh hưởng đến chữ ký của phương thức. Nếu không, trình biên dịch sẽ có một thời gian khó khăn hơn giữa sự quá tải. – sparky68967

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