Tôi hơi bối rối về cách thức hoạt động của các phương thức tiện ích mở rộng.C# Phương thức mở rộng ưu tiên
Nếu tôi đọc chính xác http://msdn.microsoft.com/en-us/library/bb383977.aspx và điều này If an extension method has the same signature as a method in the sealed class, what is the call precedence?.
Sau đó, điều sau đây sẽ ghi ra "Sơ thẩm", nhưng thay vào đó nó viết "Phương pháp mở rộng".
interface IFoo
{
}
class Foo : IFoo
{
public void Say()
{
Console.WriteLine("Instance");
}
}
static class FooExts
{
public static void Say(this IFoo foo)
{
Console.WriteLine("Extension method");
}
}
class Program
{
static void Main(string[] args)
{
IFoo foo = new Foo();
foo.Say();
}
}
Đánh giá cao sự trợ giúp trong việc làm rõ hành vi.
Bạn có chắc chắn ghi đè phương pháp tích hợp với phương thức mở rộng không? – kenny
Trong nháy mắt thứ hai hoặc biên dịch nó, giao diện không có Say(), vì vậy những gì bạn đã gọi phương thức mở rộng. Với Save() trong giao diện trình biên dịch phàn nàn với 'C: \ projects \ _play \ ExtensionMethods \ Program.cs (2,1): lỗi CS0116: Không gian tên không thể chứa trực tiếp các thành viên như trường hoặc phương thức' – kenny