如何模拟 StringBuilder 类

本文关键字:StringBuilder 模拟 何模拟 | 更新日期: 2023-09-27 18:34:44

根据这个答案,我想知道如何模拟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;
    }
}

如何模拟 StringBuilder 类

尽管很少需要模拟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操作的任何地方使用此接口。

对于您的测试,您可以使用此界面的模拟。