¿Puedo usar la herencia con un método de extensión?

Tengo los siguientes

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"); } 

Más otras clases con extensiones similares que devuelven la clave formateada como “D2”

¿Existe alguna forma de que pueda heredar de una clase base y que la clase base proporcione la funcionalidad para que no tenga que repetir el mismo código de método de extensión?

Actualizar. Lo siento, no mencioné esto, pero mis clases como CityType son Enums.

Del comentario a continuación, CityType y CityStatus son enumeraciones. Por lo tanto puedes hacer esto:

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

Respuesta original:

Puede utilizar un método genérico y una interfaz ID2Able :

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

De esta manera, el método de extensión no se mostrará para absolutamente todos los tipos; solo estará disponible para cosas de las que herede ID2Able .

Puedes hacer el método genérico. C # inferirá el tipo:

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

Sus enumeraciones ya se heredan de una clase base común, es decir, System.Enum . Así que puedes hacer esto (Enums no acepta “D2” como una cadena de formato, pero aceptan “D”, así que agregué una llamada a PadLeft):

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