2016-02-15 12 views
0

За this answer, я хотел бы знать, как насмехаться с StringBuilder класс. То, как они насмехается класс Console является блестящим:Как издеваться над классом StringBuilder

Вам нужен интерфейс, определяющий вашу зависимость:

public interface IConsoleService 
{ 
    string ReadLine(); 
    void WriteLine(string message); 
} 
You create a default implementation for it: 

public class ConsoleService : IConsoleService 
{ 
    public string ReadLine() 
    { 
     return Console.ReadLine(); 
    } 

    public void WriteLine(string message) 
    { 
     Console.WriteLine(message); 
    } 
} 

Что бы подход к насмешливый StringBuilder.Append метод?

До сих пор, что у меня есть это:

public interface IStringBuilderService 
{ 
    string Append(string line); 
    StringBuilder s 
} 

public class StringBuilderService : IStringBuilderService 
{ 
    public string Append(string line) 
    { 
     return this.ToString() += line; 
    } 
} 
+1

Почему? Я не понимаю, что насмехается над вами. Это класс библиотеки; не пересекает границы. – duffymo

+0

@duffymo for practice –

+0

Плохая практика, вы мало пользы. Это только создает плохие привычки. Сначала мы делаем наши привычки; то наши привычки делают нас. Сохраните свою энергию и научитесь правильно оценивать. – duffymo

ответ

1

Несмотря на то, что редко потребность издеваться StringBuilder, я предполагаю, что вам это нужно ознакомительную цель .. так вот один из возможных способов издеваться над ним.

Ваш класс реализации по умолчанию должен обернуть экземпляр StringBuilder.

public interface IStringBuilderService 
{ 
    IStringBuilderService Append(string line); // mimic the StringBuilder Append signature 
    StringBuilder S { get; } 
} 

public class StringBuilderService : IStringBuilderService 
{ 
    private StringBuilder _actualStringBuilder; 

    public StringBuilder S 
    { 
    get { return _actualStringBuilder; } 
    } 

    public StringBuilderService() // you could also take in a parameter if you wish to initialize the variable 
    { 
    _actualStringBuilder = new StringBuilder(); 
    } 

    public IStringBuilderService Append(string line) 
    { 
     _actualStringBuilder.Append(line); 
     return this; 
    } 

    public override string ToString() 
    { 
    return _actualStringBuilder.ToString(); 
    } 
} 

Причина нам нужен экземпляр StringBuilder завернутого в конкретном классе, потому что Console статический ресурс, и, следовательно, доступ без переменной требовании экземпляра. StringBuilder будет на экземпляр, и, следовательно, нам нужна переменная, инкапсулирующая это.

После этого интерфейса вы можете использовать этот интерфейс там, где требуется StringBuilder.

И для ваших тестов вы можете использовать макет этого интерфейса.

+0

это выглядит как удар-задница, yaar –

+0

будет выглядеть IStringBuilderService? такой же, как у меня? –

+0

добавил определение интерфейса .. метод append интерфейса должен имитировать определение StringBuilder для согласованности (без жесткого правила), кроме как вместо StringBuilder, IStringBuilderService является нашей абстракцией, поэтому мы вернем это. –

Смежные вопросы