如何扩展THE类,而不是实例?

时间:2010-09-16 20:14:02

标签: c# extension-methods

  

可能重复:
  Can you make an Extension Method Static/Shared?

扩展方法很棒! 请原谅我的无知,但到目前为止,我只发现你可以扩展一个类来允许其实例上的方法,但不是类本身。

这就是我要做的事 我有一个这样的枚举:

enum ViewType
{
    Front_View,
    Back_View
}

我已经创建了一个扩展方法ToDescription()来显示视图类型的用户友好的文本表示,如下所示:

ViewType thisview = ViewType.Front_View;
string thisviewtext = thisview.ToDescription();  // translates to "Front View"

但是后来在代码中,我希望从该转换中解析回类型,如果假设我可以扩展枚举类型本身,就像这个潜在的代码:

// !!!NOT REAL CODE YET!!!
// translate to value ViewType.FrontView
ViewType newview = ViewType.ParseFromDescription("Front View");

如何实施ParseFromDescription(string)扩展方法(如果可能)?

3 个答案:

答案 0 :(得分:7)

你做不到。您可以定义包含该方法的静态助手类ViewTypeTools。扩展方法基本上是相同的,但写得更好。

答案 1 :(得分:2)

您无法使静态方法可调用,就好像它包含在另一个静态类中一样。例如,您不能创建一个String.IsNullOrBlank()函数,该函数除了为null或零长度外,还检查传递的字符串是否只有空格。您必须能够访问String类代码并在那里添加方法。

为了获得你想要的结果,我将从字符串开始并实现一个扩展方法ParseDescriptionToViewType(),它将字符串作为其“this”参数并输出ViewType。

答案 2 :(得分:0)

另一个选项(kludgy),我没有测试,但我认为会起作用

((ViewType)null).ParseFromDescription( "Front View" );

// defined like 
public static ViewType( this ViewType me, string description )
{
    // ignore the 'this' parameter, just parse etc ...
}