关于类:C#扩展方法

C# extensions method

本问题已经有最佳答案,请猛点这里访问。

对于这种扩展:

1
2
3
4
5
6
7
8
public static class ImageExtensions
{
    public static Image LoadImage(string path)
    {
        using (MemoryStream ms = new MemoryStream(File.ReadAllBytes(path)))
            return Image.FromStream(ms);
    }
}

如何使它可以被称为Image.LoadImage(path),而不是ImageExtensions.LoadImage(path)

我通常可以使用其他扩展方法,它们的第一个参数是this Image img。这些都是通过使用instance.Method()工作的。


这是不可能的。不能编写充当静态扩展的扩展方法,因为扩展方法需要对象实例。


实际上,签名为public static Image LoadImage(string path的方法甚至不是扩展。它只是一个静态方法,因此要想编写它,只需更改类名:

1
2
3
4
5
6
7
8
public static class Image
{
    public static Image LoadImage(string path)
    {
        using (MemoryStream ms = new MemoryStream(File.ReadAllBytes(path)))
            return Image.FromStream(ms);
    }
}