Với đoạn mã sau:quy tắc chuyển đổi cho các nhà khai thác chuyển đổi quá tải
using System;
namespace Test721
{
class MainClass
{
public static void Main(string[] args)
{
Console.WriteLine(new A()); //prints 666
Console.WriteLine(new B()); //prints 666
Console.ReadLine();
}
}
public class A
{
public static implicit operator int(A a)
{
return 666;
}
}
public class B : A
{
public static implicit operator double(B b)
{
return 667;
}
}
}
kết quả là như trong các ý kiến - cả hai dòng in 666.
tôi mong đợi Console.WriteLine(new B());
viết 667, trong khi có a double
quá tải của Console.WriteLine
.
Tại sao điều đó lại xảy ra?
Câu trả lời hay nhất tôi có thể mong đợi, cảm ơn bạn. Tôi sẽ chấp nhận trong một phút, khi SO cho phép tôi;] –
Tôi có đúng với giả định rằng các quy tắc này sẽ làm cho trình biên dịch nghĩ rằng một 'float' vượt trội hơn một' double'? Điều đó có vẻ khá rực rỡ. – supercat