2012-06-19 3 views
2

Возможно ли в C# (и я думаю, что это не так) расширить int для реализации интерфейса (без создания класса-оболочки)?Расширение Int для реализации интерфейса в C#

У меня есть интерфейс, как так

public interface IActionLoggerObject 
{ 
    string GetForLogging(); 
} 

Я хотел бы (концептуально) быть в состоянии сделать это:

public class int:IActionLoggerObject 
{ 
    string IActionLoggerObject.GetForLogging() { return "s"; } 
} 

ответ

8

Можно ли (и я думаю, что это не так) to (in C#) расширять «int» для реализации интерфейса (без создания класса оболочки)?

Нет. Вы никогда не сможете изменить интерфейсы, существующие в существующем виде.

Непонятно, почему вы пытаетесь это сделать, но создание класса обертки - это, безусловно, путь вперед.

+5

Джон, конечно, правильно. Но что вы пытаетесь сделать здесь? Не могли бы вы использовать метод расширения в Int? – MNGwinn

+0

У меня есть метод для ведения журнала, и один из параметров имеет тип IActionLoggerObject. В моем использовании этого метода ведения журнала мне иногда нужно было передать Int (или строку), но он должен был иметь тип IActionLoggerObject, поэтому у меня есть объект-оболочка для них. Но я просто раздражался этим и искал способ расширения Int для реализации интерфейса, чтобы мне не нужен этот класс-оболочка. – XenoPuTtSs

+1

@XenoPuTtSs: Разве вы не можете просто перегрузить метод? –

3

Как сказал MNGwinn в своем комментарии к ответу Джона Скита, вы можете использовать методы расширения, если они отвечают всем вашим требованиям.

Так, что-то вроде этого:

public static class ExtensionMethods 
{ 
    public static string GetForLogging(this int @this) 
    { 
     return "s"; // or maybe return @this.ToString(); 
    } 
} 

позволит вам сделать это.

string val = 3.GetForLogging(); 
0

Другой метод расширения возможности:

public interface IActionLoggerObject 
{ 
    string GetForLogging(); 
} 

public class ActionLoggerObjectInt : IActionLoggerObject 
{ 
    public string GetForLogging() 
    { 
     return "s"; 
    } 
} 

public static class ExtensionMethods 
{ 
    public static IActionLoggerObject AsActionLoggerObject(this int i) 
    { 
     return new ActionLoggerObjectInt(); 
    } 
} 

использование:

Console.WriteLine(32.AsActionLoggerObject().GetForLogging()); 
LoggingMethod(32.AsActionLoggerObject()); 
Смежные вопросы