2010-04-16 24 views
7

Chúng ta hãy giả sử tôi có ba phương pháp định nghĩa:Function Overloading

int F1(int, int); 
int F1(float, float); 
Float F1(int, int); 

và tôi đang gọi phương thức F1 ở đây:

Console.writeline(F1(5,6).ToString())); 

Những phương pháp đó sẽ gọi và tại sao?

Trả lời

16

Hàm đầu tiên và thứ ba sẽ không biên dịch trong cùng một không gian tên.

Điều này là do chữ ký chức năng được phân biệt theo loại và số tham số, và chúng giống nhau. Các kiểu trả về không được coi là một phần của chữ ký phương thức.

Nếu bạn chỉ có dấu thứ nhất và thứ hai (hoặc thứ hai và thứ ba) trong không gian tên, tên phù hợp nhất sẽ được gọi (số nguyên có kiểu số nguyên được truyền vào, khi bạn đang chuyển số nguyên).

Eric Lippert có một số tuyệt vời blog entries về sự tinh tế của C#.

+1

+1 Đối với liên kết Lippert –

0

Bạn đã thử chưa?

Bạn sẽ nghĩ rằng nó nên thực hiện một trong hai:

int F1(int, int); 

hoặc

Float F1(int, int); 

Tái định nghĩa hàm, tuy nhiên, không hoạt động trên các giá trị trở lại - đó là loại tham số đó phải là duy nhất, vì vậy điều này thậm chí sẽ không biên dịch.

-1

Trong C# nó là thông số quá tải, không hoạt động quá tải. Bạn có thể thay đổi các tham số đầu vào cho một phương thức, có thể dẫn đến một kiểu trả về khác, nhưng bạn không thể chỉ định một kiểu trả về differnt để phân biệt phương thức của bạn.

0

Trong chức năng quá tải tên của một hàm giống nhau nhưng chúng khác nhau về loại tham số hoặc số tham số.

Trong hàm trả về quá tải hàm của một hàm không được xem xét.

Vì vậy, mã này sẽ không biên dịch.Bởi vì bạn không thể viết chính xác cùng chức năng trong một không gian tên.

2

lỗi biên dịch vì chữ ký chức năng giống nhau được sử dụng hai lần trong chương trình của bạn!

int F1(int, int); 

Float F1(int, int); 

chức năng chữ ký là (tên của chức năng + số đối số + kiểu cho mỗi đối số) đó là như nhau trong trường hợp của bạn ...

-1

Về cơ bản hoạt động quá tải là một tính năng quan trọng OOPS.

Nó cho phép bạn có nhiều phương thức có cùng tên nhưng với các biến thể trong danh sách tham số.

gì tạo nên chức năng quá tải, những gì không được gọi là chức năng quá tải, và tại sao nó là thời gian biên dịch đa hình được giải thích trong bài viết Function Overloading in OOPS

1
class Program 
{ 
    static void Main(string[] args) 
    { 

     Add(3, 4,3); 
    } 
    public static void Add(int FN, int SN) 
    { 
     Console.WriteLine("Total is {0}", FN + SN); 
    } 
    public static void Add(int FN, int SN, int TN) 
    { 
     Console.WriteLine("Total is {0}", FN + SN + TN); 
    } 
} 

Phương pháp quá tải và quá tải hàm thuật ngữ này được sử dụng thay thế cho nhau. Phương thức nạp chồng cho phép một lớp có nhiều phương thức có cùng tên. Nhưng với chữ ký khác nhau. Các hàm C# có thể bị quá tải dựa trên số, kiểu (int, float etc) và loại (Value, ref hoặc out) của các tham số. Chữ ký của phương thức không bao gồm kiểu trả về và công cụ sửa đổi thông số. Vì vậy, nó không thể quá tải một chức năng dựa trên kiểu trả về và sửa đổi params.