Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/292.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 扩展静态类的扩展方法_C#_.net - Fatal编程技术网

C# 扩展静态类的扩展方法

C# 扩展静态类的扩展方法,c#,.net,C#,.net,我想知道是否可以使用扩展方法或其他技术来扩展静态类,如 System.Net.Mime.MediaTypeNames.Image,它的类型比我需要的少。否,扩展方法只能用于添加实例方法,不能用于添加静态方法(甚至属性)。扩展方法实际上只是围绕静态方法的语法糖。例如,当您使用诸如Count()之类的扩展方法时: 这实际上是为了: var list = GetList(); var size = Enumerable.Count(list); 您不能使用扩展方法向现有类添加额外的静态方法。不,这在

我想知道是否可以使用扩展方法或其他技术来扩展静态类,如
System.Net.Mime.MediaTypeNames.Image
,它的类型比我需要的少。

否,扩展方法只能用于添加实例方法,不能用于添加静态方法(甚至属性)。扩展方法实际上只是围绕静态方法的语法糖。例如,当您使用诸如Count()之类的扩展方法时:

这实际上是为了:

var list = GetList();
var size = Enumerable.Count(list);

您不能使用扩展方法向现有类添加额外的静态方法。

不,这在C#中还不可能实现,但希望在某个时候会实现。而且您不能以这种方式对静态类进行子类化并添加新方法,因为静态类必须派生自
对象
。不过,您可以做的一件事是声明另一个静态类,当您需要扩展方法时,您将使用该静态类,这会在代码中产生非常类似的效果。例如:

public static class MessageBox2
{
    public static DialogResult ShowError(string Caption, string Message, params object[] OptionalFormatArgs)
    {
        return MessageBox.Show(string.Format(Message, OptionalFormatArgs), Caption, MessageBoxButtons.OK, MessageBoxIcon.Error);
    }
}

由于原始类是静态的,根据定义,“扩展”方法不需要作为
这个
参数接收实例,并且可以简单地使用原始类的静态方法。

您不能扩展静态类;搜索这个问题的重复项,你会看到一些解决方法。你为什么需要这些?静态类没有上下文,在静态类中可以做的任何事情都可以在代码中的“任何地方”完成。@Amby-我认为您可能只想为组织的钱包做这件事。当然,您可以使用必要的方法创建一个静态ImageUtility类(根据这个答案,他无论如何都必须这样做),但是我认为OP希望以一种不需要额外类的方式组织他的代码。不幸的是,你不能。(我来这里也是为了做同样的事情)。@ManishBasantani如果能够以这种方式扩展静态类,那将是一件非常棒的事情。例如,如果您可以将扩展方法添加到
Math
,该怎么办?这比到处都有多个
MathHelper
类要好得多。说“扩展方法只能用于添加实例方法”对吗?正如您所解释的,它们只提供作为实例方法的外观。它们实际上不是实例方法,或者您可以访问类的非公共成员。
public static class MessageBox2
{
    public static DialogResult ShowError(string Caption, string Message, params object[] OptionalFormatArgs)
    {
        return MessageBox.Show(string.Format(Message, OptionalFormatArgs), Caption, MessageBoxButtons.OK, MessageBoxIcon.Error);
    }
}