我可以使用扩展方法inheritance吗?
我有以下内容:
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”的键
有没有一种方法可以从基类inheritance并让基类提供function所以我不必重复相同的扩展方法代码?
更新。 对不起,我没有提到这个,但像CityType这样的课程是Enums。
从下面的评论中, CityType
和CityStatus
是枚举。 因此你可以这样做:
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(this T key) where T : ID2Able { return ((int) key).ToString("D2"); } }
这样,扩展方法不会出现绝对的每种类型; 它只适用于你inheritanceID2Able
东西。
您可以使方法通用。 C#将推断出类型:
public static class Extension { public static string D2 (this T key) { return ((int)(object) key).ToString("D2"); } }
您的枚举已经全部inheritance自公共基类,即System.Enum
。 所以你可以这样做(Enums不接受“D2”作为格式字符串,但是他们接受“D”,所以我添加了对PadLeft的调用):
public static class EnumExtensions { public static string D2(this Enum e) { return e.ToString("D").PadLeft(2, '0'); } }