Trả lời
Quá tải là khi bạn tạo nhiều phương pháp, với các thông số khác nhau. Ví dụ:
public class Car { public Car() { // Do stuff } public Car(int numberOfCylinders) { // Do stuff } }
Bạn có thể thấy hàm tạo có cùng tên, nhưng các thông số khác nhau. Bạn sẽ thấy các phương thức quá tải và các hàm tạo trong Visual Studio trong Intellisense, với các mũi tên nhỏ đi lên và xuống để bạn có thể duyệt các chữ ký.
Ghi đè là khi bạn cung cấp triển khai mới cho phương thức từ lớp cơ sở. Ví dụ:
public class Square { public double x; // Constructor: public Square(double x) { this.x = x; } public virtual double Area() { return x*x; } } class Cube: Square { // Constructor: public Cube(double x): base(x) { } // Calling the Area base method: public override double Area() { return (6*(base.Area())); } }
Lưu ý rằng trong C#, bạn không thể override phương pháp không ảo hoặc tĩnh.
Lưu ý rằng trong C#, bạn không thể ghi đè lên một phương thức tĩnh hoặc tĩnh.bạn có nghĩa là các phương thức tĩnh không được kế thừa? – NoviceToDotNet
quá tải đang cung cấp nhiều phương pháp có cùng tên và chữ ký khác nhau:
void Foo() {...}
void Foo(int i) {...}
Overriding được sử dụng trong thừa kế để thay đổi việc thực hiện mỗi lớp con:
class SomeBase {
public virtual void Foo() {}
}
class SomeOther : SomeBase {
public override void Foo() {
// different implementation, possibly calling base.Foo();
}
}
Với trên, ngay cả khi tôi làm:
SomeBase obj = new SomeOther();
obj.Foo();
nó sẽ gọi số SomeOther.Foo
triển khai. Phương thức được gọi phụ thuộc vào loại dụ, không phải là biến.
Phương thức ẩn là đối diện; nó thay thế chữ ký phương pháp, nhưng chỉ áp dụng nếu bạn gọi phương thức từ các loại có nguồn gốc:
class SomeBase {
public void Foo() {}
}
class SomeOther : SomeBase {
public new void Foo() {
// different implementation, possibly calling base.Foo();
}
}
Bây giờ là:
SomeOther obj = new SomeOther();
SomeBase baseObj = obj;
obj.Foo(); // calls SomeOther.Foo
baseObj.Foo(); // calls SomeBase.Foo
tức là các cuộc gọi phương pháp phụ thuộc vào biến, không phải là ví dụ.
Bạn có nghĩa là gì? Phương pháp ghi đè: \t ảo (trong BASE) + ghi đè (trong DERIVED), Phương thức Ẩn: \t {nothing} (trong BASE) + mới (trong DERIVED) –
Quá tải là định nghĩa của nhiều "chữ ký" có thể có của một phương thức hoặc toán tử duy nhất. Mỗi chữ ký có các đối số khác nhau và về cơ bản là một hàm riêng biệt, không khác với hàm đa hàm có các tên khác nhau. Điều này thường được sử dụng để nhóm các hoạt động khái niệm tương tự, chẳng hạn như quá tải +
để làm việc với BigInteger
và với String
: cả hai hoạt động có vẻ hợp lý để sử dụng +
cho (trừ khi bạn nghĩ rằng tất cả các quá tải của + nên xác định Abelian groups - quá tải String
).
Overriding là định nghĩa của nhiều càng tốt triển khai của chữ ký phương pháp tương tự, như vậy mà thực hiện được xác định bởi các kiểu thời gian chạy của các đối số 0 (thường được xác định bởi tên this
trong C#).
Ẩn là định nghĩa của một phương pháp trong một loại hình xuất phát với một chữ ký giống hệt như trong một trong các loại cơ sở của nó mà không trọng.
Sự khác biệt thực tiễn giữa trọng và ẩn nấp như sau:
- Nếu một phương pháp là ghi đè, việc thực hiện để gọi được dựa trên thời gian chạy loại của đối số
this
. - Nếu phương pháp chỉ đơn giản là ẩn, việc triển khai cuộc gọi được dựa trên loại đối số biên dịch đối số
this
.
Trong thuật ngữ đơn giản:
quá tải là khi bạn có tên cùng một phương pháp có ký hiệu khác. Điều này có thể ở cùng một lớp. Ví dụ:
int Add (int a, int b)
{
return a + b; // returns int
}
float Add (float a, float b)
{
return a + b; // returns float
}
Ghi đè là khi bạn có cùng tên phương thức và chữ ký trong lớp dẫn xuất như trong lớp cơ sở. Trong trường hợp này, chúng ta nói lớp dẫn xuất ghi đè phương thức lớp cơ sở. Phương thức nào chạy tùy thuộc vào trường hợp nào gọi phương thức
ví dụ:
public class Shape
{
public virtual void Draw() { }
}
public class Square : Shape
{
public override void Draw()
{
// Code to draw square
}
}
public class Circle : Shape
{
public override void Draw()
{
// Code to draw circle
}
}
Ẩn hoặc đóng gói là khi bạn khai báo các biến thành viên và phương pháp của một lớp riêng để họ không thể được truy cập bởi bất kỳ lớp khác, không phải ngay cả những lớp học có nguồn gốc
Ví dụ:
private int onlyICanAccess;
private void OnlyICanExecute()
{
// ...
}
Điều này không ẩn trong ngữ cảnh này. – perfectionist
@perfectionist Nó vẫn đang ẩn nấp –
quá tải là một ví dụ về morphsm poly, bạn có thể overloa số, kiểu dữ liệu và chuỗi các tham số đã được thông qua giữa hai phương pháp ..
trọng (khác nhau từ ảo) có nghĩa là một số chức năng được xác định là có, , nhưng bạn có thể cho ý tưởng rõ ràng hơn tại thời điểm inheritind
phương tiện ẩn giấu các tính năng nội bộ và đại diện cho các tính năng cần thiết, một trong những tính năng của OOP khái niệm
Google để có được thông tin detaied
Giả sử rằng bạn hiểu những lời giải thích do áp phích khác, một cách để nhớ sự khác biệt giữa quá tải và quan trọng nhất là rằng, khi sử dụng trên tải ing, có khả năng 'tải' các chức năng có cùng tên .
Ngớ ngẩn, tôi biết, nhưng nó phù hợp với tôi.
- 1. Quá tải và ghi đè trong Java
- 2. C++ vấn đề ghi đè/quá tải
- 3. Lựa chọn phương pháp có quá tải và ghi đè
- 4. Giải thích biên dịch ghi đè và quá tải
- 5. Ghi đè tràn: ẩn
- 6. Không ghi đè một phương pháp ảo không phải là const ẩn một quá tải const?
- 7. Quá tải so với ghi đè trong VB.net
- 8. Tính đa hình, quá tải và ghi đè các khái niệm tương tự?
- 9. Sự khác biệt giữa quá tải phương thức và ghi đè là gì?
- 10. Không thể giải quyết phương thức F # đã bị ghi đè và quá tải từ C#
- 11. Ghi đè so với phương thức ẩn
- 12. Sự khác biệt giữa ghi đè ảo, ghi đè, ghi đè mới và bị ghi
- 13. Delphi - ghi đè hành vi ẩn của TForm.showModal
- 14. Ghi đè hoặc ghi đè
- 15. MathJax: Ẩn quá trình tải Mathjax
- 16. C++ Ghi đè ... ghi đè?
- 17. Ghi đè hoặc quá tải Tự động hoàn thành Quy tắc thêm
- 18. Cho phép thẻ cụ thể ghi đè tràn: ẩn
- 19. Ghi đè một phần của hàm ẩn danh google.com
- 20. Dòng lệnh tự ghi đè khi các lệnh quá dài
- 21. Ghi đè phương thức ghi đè (C#)
- 22. C# Ẩn, ghi đè và gọi hàm từ lớp cơ sở
- 23. Javascript: Ghi đè XMLHttpRequest.open()
- 24. Ghi đè quá trình deserialization XML để sử dụng deserialization cơ sở và thêm chức năng
- 25. Làm cách nào để ghi đè tải trọng trong số
- 26. ghi đè Explicit và C++ 0x thức
- 27. ghi đè subclipse và cam kết?
- 28. Ghi đè dữ liệu "mới" và Ghi nhật ký về người gọi
- 29. Gọi chức năng ghi đè từ chức năng ghi đè
- 30. Nhận xét về phương thức ghi đè và bị ghi đè cùng lúc trong C#?
http://stackoverflow.com/questions/673721/overloading-and-overriding –
có thể trùng lặp của [Đa hình so với ghi đè và quá tải] (http://stackoverflow.com/questions/154577/polymorphism-vs-overriding- vs-overloading) – Ian