我可以使用扩展方法继承吗?

时间:2012-10-24 06:12:09

标签: c#

我有以下内容:

public static class CityStatusExt
{
    public static string D2(this CityStatus key)
    {
        return ((int) key).ToString("D2");
    }


public static class CityTypeExt
{
    public static string D2(this CityType key)
    {
        return ((int) key).ToString("D2");
    }

加上具有类似扩展名的其他类,返回格式为“D2”的键

有没有办法可以从基类继承并让基类提供这样的功能 我不必重复相同的扩展方法代码吗?

更新。很抱歉我没有提到这个,但像CityType这样的课程是Enums。

3 个答案:

答案 0 :(得分:6)

您可以使该方法通用。 C#将推断出类型:

public static class Extension 
{ 
    public static string D2<T> (this T key) 
    { 
        return ((int)(object) key).ToString("D2"); 
    } 
}

答案 1 :(得分:4)

从下面的评论中,CityTypeCityStatus是枚举。因此,你可以这样做:

public static class Extensions
{
    public static string D2(this Enum key)
    {
        return Convert.ToInt32(key).ToString("D2");
    }
}

原始答案:

您可以使用通用方法和界面ID2Able

public static class Extensions
{ 
    public static string D2<T>(this T key) where T : ID2Able
    { 
        return ((int) key).ToString("D2"); 
    } 
}

这样,扩展方法不会出现绝对的每种类型;它只适用于您从{。}}继承的内容。

答案 2 :(得分:1)

您的枚举已经都继承自公共基类,即System.Enum。所以你可以这样做(Enums不接受“D2”作为格式字符串,但是他们接受“D”,所以我添加了对PadLeft的调用):

public static class EnumExtensions
{
    public static string D2(this Enum e)
    {
        return e.ToString("D").PadLeft(2, '0');
    }
}