Liệu một phương thức có làm quá tải một phương thức khác không, hay cả hai phương thức đều bị quá tải


13

Nếu tôi tạo phương thức này

public void foo()

Và sau đó tôi tạo một phiên bản quá tải như thế này

public void foo( string bar )

Chúng ta có nói rằng các hàm thứ hai làm quá tải hàm thứ nhất hoặc cả hai phương thức đều "quá tải" như nhau không?

Điều này có nghĩa là (tôi nghĩ), rằng có một hàm loại cơ sở, đang bị quá tải, bởi một hàm khác (hơi giống như thừa kế, nhưng không thực sự).

Giả sử rằng một phương thức có thể "quá tải phương thức khác", cũng sẽ bao hàm các thuật ngữ như "nạp chồng" và "nạp chồng", nếu đó là một từ. Nhưng điều đó không cảm thấy đúng chút nào, đặc biệt là vì bạn có thể có một số quá tải.

Tôi đã nhận được câu hỏi này khi tôi muốn viết ra quá trình tạo ra một phương thức quá tải và tôi muốn cách viết chính xác nhất.

Ví dụ:

  • Tôi đang quá tải foo
  • Tôi đang quá tải foovớifoo( string bar )
  • Tôi đang tạo một phương thức quá tải
  • Tôi đang làm cho foo quá tải

Vì vậy, yeah, loại này làm tôi suy nghĩ, tôi không biết phải làm gì với nó. Có hàng trăm, nếu không phải hàng ngàn mô tả về chức năng quá tải trực tuyến, nhưng thoạt nhìn tôi không thể tìm thấy bất kỳ địa chỉ nào.


Tôi muốn biết tại sao quá tải từ được sử dụng cho việc này. Nó dường như không có ý nghĩa gì. Những gì đang được tải? Làm thế nào nó được tải lại hoặc quá mức?
Martin Maat

@MartinMaat Bạn đã đọc câu trả lời được chấp nhận bởi nhận xét của thitonkindall về nó chưa? Họ dường như làm tốt công việc giải thích những gì đang được tải (hơn).
8bittree

Tôi đã đọc những điều đó, họ giải thích khái niệm, không phải là dân tộc học.
Martin Maat

Câu trả lời:


29

Khi nói về quá tải, tên của hàm bị quá tải, không phải chính hàm đó. Các chức năng nạp chồng tên là "quá tải" và quá tải tên, nhưng không phải nhau. Trong ví dụ của bạn, "public void foo()""public void foo( string bar )"cả hai đều quá tải tên "foo". Do đó, bạn không thể nói về vấn đề quá tải và quá tải của một trong các chức năng, bởi vì chúng không có mối quan hệ trực tiếp.

Trong ví dụ của bạn, bạn có thể nói rằng bạn đang nạp chồng "foo" (tên) với "foo (thanh chuỗi)" (hàm), nhưng bạn không thể nói rằng bạn tạo một phương thức quá tải, bởi vì các phương thức không bao giờ bị quá tải. Bạn có thể nói rằng bạn tạo ra một phương thức quá tải. Để hình thành "làm cho foo bị quá tải" chỉ là một cách tồi tệ hơn để nói "quá tải foo".


Nhưng sau đó, không phải mọi chức năng đều làm quá tải tên của nó, ngay cả khi không có chức năng nào khác có cùng một chức năng?
leftaroundabout

Tôi đồng ý với điều này như là câu trả lời cho câu hỏi chung ở trên. Nhưng nếu người ta gọi một trong các chức năng từ cái kia, thì tôi nhận thấy một ý nghĩa trong đó cái này làm quá tải cái kia.
Joshua Drake

3
@leftaroundabout: "Quá tải" ngụ ý rằng bạn đang thực hiện "tải" nhiều hơn bình thường, vì vậy thuật ngữ này chỉ được sử dụng khi bạn có nhiều hơn một chức năng có cùng tên.
kindall

Đồng ý với @kindall; từ "quá tải" trong ngữ cảnh phát triển phần mềm có nghĩa là "gán nhiều hơn một nghĩa"; quá tải các cột trong DB (nghĩa là phụ thuộc vào các trường khác), quá tải các tham số (nghĩa là phụ thuộc vào các tham số khác), v.v. Một phương thức không quá tải bất kỳ phương thức nào khác, nhưng nếu có nhiều hơn một phương thức với một tên , thì tên đó là " quá tải ".
KutuluMike

15

Tôi chỉ đơn giản nói foolà quá tải. Chắc chắn không có mối quan hệ chủ / nô lệ hoặc cha mẹ / con cái đang diễn ra ở đây.


2
Đồng ý - đó là tên của phương thức hoặc toán tử bị quá tải, không phải chính phương thức đó. Không được nhầm lẫn với ghi đè , trong đó việc thực hiện một phương thức đã cho trong một lớp con thay thế việc thực hiện trong lớp cha.
Caleb

1
Tôi cũng đồng ý với điều này, nhưng tôi nghĩ rằng thiton làm công việc tốt hơn trong việc giải thích nó. Cảm ơn về câu trả lời của bạn !
Willem D'Haeseleer

3

Tôi nghĩ rằng một cách tốt để thể hiện điều này là tập trung vào kết quả cuối cùng, chứ không phải vào những thay đổi được thực hiện cho lớp theo thời gian. Do đó, thay vì nói "Tôi đã quá tải 'foo' với 'foo (các tham số khác)'," bạn nói "foo là một hàm bị quá tải, với 'foo ()' và 'foo (các tham số khác).'"

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.