Hãy xem xét một phương pháp như thế nàyQuy tắc cho các đối số được đặt tên là gì và tại sao?
void RegisterUser(string firstname, string lastname, int age);
Tôi thích đặt tên một cách rõ ràng các đối số của phương pháp như thế này khi tôi gọi cho họ bởi vì nó dễ dàng cho một người nào đó để trộn lên firstname
và lastname
đối số. Tuy nhiên, nó không thực sự cần thiết cho age
. Ví dụ, tôi nghĩ rằng điều này nên được OK từ một quan điểm rõ ràng.
RegisterUser(firstname: "John", lastname: "Smith", 25);
Nhưng các lỗi sau đây sẽ được ném:
Đặt tên kỹ thuật số phải xuất hiện sau khi tất cả các đối cố định đã được chỉ định
Một điều thú vị là nếu chữ ký là
void RegisterUser(int age, string firstname, string lastname);
sau đó gọi nó là foll ows KHÔNG ném một lỗi
RegisterUser(25, firstname: "John", lastname: "Smith");
Tại sao C# được thiết kế như thế này? Có một biến chứng cho trình biên dịch nếu kịch bản đầu tiên được cho phép không?
Tôi chắc chắn ngay cả Python cũng thi hành thiết kế này. Tôi muốn nói đó là một nguyên tắc tốt nếu như Python thực thi một cái gì đó, nó có lẽ rất cần thiết. Và thứ tự của các đối số là rất cần thiết. – James
@ James có, python thi hành thứ tự, nhưng trong C# sắp xếp các đối số là không cần thiết sau khi bạn bắt đầu đặt tên chúng một cách rõ ràng. Tuy nhiên, nếu bạn thực thi việc đặt hàng khi đặt tên một phần các đối số xảy ra thì nó sẽ giúp làm cho mã tự tài liệu hơn và (imo) sẽ làm cho việc hiểu mã dễ dàng hơn. –
Tôi biết rằng bạn có thể bắt đầu đặt tên đối số một cách rõ ràng bằng cả hai ngôn ngữ. Có lẽ tôi đã nói ra điều đó trước đây. Bạn có thể đi từ các đối số được đặt hàng để đặt tên rõ ràng trong cùng một cuộc gọi hàm, nhưng bạn không thể quay lại. Nó giống nhau giữa hai ngôn ngữ. – James