C# sử dụng công văn đơn, bao gồm các phương thức quá tải. Khi bạn có mã
stringBuilder.Append(parameter);
trình điều phối xem tất cả các phương pháp được xác định trên lớp của chuỗiBuilder và tìm đúng phương pháp.
Để có ví dụ về nhiều công văn, hãy xem Prolog (đây là cái đầu tiên tôi có thể nghĩ đến). Bạn có thể xác định hàm trong prolog như vậy:
func(Arg1, Arg2) :- ....body....
Điều này không được định nghĩa trong bất kỳ lớp nào nhưng trong phạm vi toàn cầu. Sau đó, bạn có thể gọi func(Arg1, Arg2)
trên bất kỳ hai đối số nào và chức năng này sẽ được gọi. Nếu bạn muốn một cái gì đó giống như quá tải, bạn phải xác nhận các loại đối số bên trong hàm, và định nghĩa nó nhiều lần:
func(Arg1, Arg2) :- is_number(Arg1), is_string(Arg2), ....body....
func(Arg1, Arg2) :- is_string(Arg1), is_list(Arg2), ....body....
func(Arg1, Arg2) :- is_number(Arg1), is_list(Arg2), ....body....
Sau đó, bất kỳ hai loại đối số bạn sẽ gửi sẽ cả được kiểm tra - đó là công văn nhiều phần.
Trong ngắn hạn, một công văn chỉ nhìn vào các phương thức được xác định trên đối số đầu tiên (trong ví dụ đầu tiên của chúng ta, stringBuilder), sau đó giải quyết quá tải chính xác để gọi bằng các đối số khác. Nhiều công văn có các phương thức/hàm được định nghĩa trong phạm vi toàn cục và xử lý tất cả các đối số giống nhau trong quá trình phân giải quá tải.
Tôi hy vọng tôi tự làm rõ, đây là một chủ đề khá khó khăn.
Cập nhật: Tôi quên đề cập đến, nhiều công văn diễn ra khi chạy trong khi công văn đơn lẻ diễn ra lúc biên dịch.
Cập nhật # 2: Rõ ràng, điều đó không đúng.
Một trong những ngôn ngữ yêu thích của tôi. Hy vọng tôi có các vị từ, mặc dù tôi đã không sử dụng nó trong nhiều năm. – configurator
Cả hai đơn và nhiều công văn có thể được thực hiện tại một trong hai thời gian biên dịch hoặc thời gian chạy. Công văn động là thuật ngữ cho mã ràng buộc khi chạy. –
@Bill: có, nhưng các loại được sử dụng cho nhiều công văn là các kiểu thời gian chạy và các loại được sử dụng cho một công văn (đối với các đối số) là kiểu thời gian biên dịch. Tôi có nhầm ở đây không? – configurator