2016-04-03 11 views
8

Mã này hoạt động khá tốt trong C# mặc dù thực tế rằng int có thể được ngầm chuyển đổi sang đôifloat:C# Các cuộc gọi là mơ hồ giữa các phương thức hoặc thuộc tính sau: F (double)' và 'F (thập phân)'

void Main() 
{ 
    int x = 7; 
    F(x); 
} 
void F(double a) 
{ 
    a.Dump("double"); 
} 
void F(float a) 
{ 
    a.Dump("float"); 
} 

Vì vậy, tại sao mã này sẽ không biên dịch? (Cuộc gọi là mơ hồ giữa các phương thức hoặc thuộc tính sau: 'UserQuery.F (double)' và 'UserQuery.F (thập phân)')

void Main() 
{ 
    int x = 7; 
    F(x); 
} 
void F(double a) 
{ 
    a.Dump("double"); 
} 
void F(decimal a) 
{ 
    a.Dump("decimal"); 
} 

Tất cả tôi đã làm là thay thế các float biến của hàm với một decimal biến thể.

+0

Chức năng Dump trông như thế nào? – jdweng

+0

Điều này tương đương với Console.WriteLine ("cái gì đó"). –

+1

bạn có thể cập nhật toàn bộ lớp học không ?? –

Trả lời

7

Không có chuyển đổi tiềm ẩn giữa các loại dấu phẩy động và loại thập phân.

Nếu có phương pháp nổi, chữ ký kép không có vấn đề gì để xác định phương pháp tương thích dựa trên yêu cầu tốt nghiệp tối thiểu (phương pháp nổi sẽ được chọn).

Không có quy tắc nào như vậy khi xử lý các loại dấu phẩy và số thập phân vì không có mức độ ưu tiên ngầm giữa hai và thập phân và phải được chỉ định rõ ràng.

Các vấn đề liên quan