`
RednaxelaFX
  • 浏览: 3053418 次
  • 性别: Icon_minigender_1
  • 来自: 海外
社区版块
存档分类
最新评论

带StringBuilder参数的ToString()重载?

    博客分类:
  • C#
阅读更多
看到了这样一个方法:
public override string ToString() {
    StringBuilder sb = new StringBuilder();
    ToString(sb);
    return sb.ToString();
}


乍一看觉得挺无聊的,干嘛还要特意写个接收StringBuilder的ToString()重载呢,直接把要返回的东西写在这个方法里不就好了么。转念一想,觉得这样写好神:这个类是一组类的基类,这些类的实例在运行时会构成一个树状结构。而为了提供更"user-friendly"的字符串表示,有必要将一个对象中嵌套着的对象的信息也放在自己字符串里。这样一来使用带StringBuilder的ToString()重载就很合理了。

赞啊~

=============================

P.S. 这棵树是个expression tree...
分享到:
评论
2 楼 RednaxelaFX 2008-09-05  
public class Base {
    public override string ToString( ) {
        StringBuilder sb = new StringBuilder();
        ToString(sb);
        return sb.ToString();
    }

    protected internal abstract void ToString(StringBuilder sb);
}

public class Derived1 : Base {
    //...
    protected internal void ToString( StringBuilder sb ) {
        sb.Append( desc );
    }
}

// other derived classes

public class CompositeDerived : Base {
    private List<Base> _args;

    public CompositeDerived( )
        : this( null ) {
    }

    public CompositeDerived( IEnumerable<Base> args ) {
        _args = new List<Base>( );
        if ( null != args ) {
            _args.AddRange( args );
        }
    }

    public IEnumerable<Base> Arguments {
        get { return _args; }
    }

    protected internal void ToString( StringBuilder sb ) {
        sb.Append( "(" );
        var n = _args.Count;
        for ( var i = 0; i < n; ++i ) {
            _args.ToString( sb );
            if ( n - 1 != i ) {
                sb.Append( ", " );
            }
        }
    }
}

就是类似这样的情况咯~
1 楼 lwwin 2008-09-05  
看的不是很明白……里面的ToString(sb)会做什么?

相关推荐

    StringBuilder类

    它有多个重载版本,可以接受各种类型的参数,如字符串、整型、浮点型、布尔值甚至其他对象。例如,`sb.append("Hello").append(" ").append("World")`将生成"Hello World"。 2. `delete(int start, int end)`:此...

    大整数加法减法 完整算法 写一个表示大整数(>2256)的对象( C++或Java),能实现 +,-,*,/(运算符重载)(

    在Java中,为了实现运算符重载,我们需要使用方法名和参数列表来模拟运算符的行为。例如,我们可以通过以下方式定义加法和减法操作: ```java public Bigint add(Bigint other) { Bigint resultBigInt = new ...

    重载重写、接口、抽象类、String指针和字符串拼接、异常catch、throw、throws、字符流和字节流

    1. **方法重载(Overloading)**:在同一类中,方法名相同但参数列表不同(参数个数、类型或者顺序不同)的方法称为重载方法。重载是在同一个类中实现的,它提高了代码的可读性和复用性。 2. **方法重写(Overriding)*...

    java资料面试题

    在 Java 中,字符串连接使用 `+` 操作符时,实际上是创建了一个新的 `StringBuilder` 对象来进行拼接,最后转换成 `String` 返回。 #### 2.21 == 和 equals() 都可用于比较两个操作数是否相等,它们有什么区别吗? ...

    C#简单读写ini文件.docx

    * writeIni() 方法(重载):用于写入 ini 文件,不管 Section,默认放在 default 里,接受两个参数:Key 和 Value。 * readIni() 方法:用于读取 ini 文件,接受两个参数:Section 和 Key。 读取 ini 文件 使用 ...

    C#基础与语法

    - 方法重载是在同一个类中定义多个同名方法,但参数列表不同。 - 方法隐藏是在派生类中声明与基类中同名的方法,但不使用`override`关键字。 - 方法重写是在派生类中覆盖基类中的虚方法。 - **正确答案解析:** ...

    吕震宇 - C#设计模式系列

    - **方法重载**:解释什么是方法重载,并给出示例。 - **多态性**:通过实例展示多态性的实现方式。 - **递归**:使用递归方法实现阶乘计算。 - **字符串操作**:包括字符串的创建、拼接等操作。 #### 二、设计模式...

    C#字符串的使用笔记(二)

    `StringBuilder`的`ToString()`方法用于将内部存储的字符串转换为`String`对象,可以有重载版本,如`ToString(int startIndex, int length)`,这实际上调用了`String`类的`Substring`方法,截取指定范围的子字符串。...

    java编程题.pdf

    例如,Circle类有无参数构造器和带参数构造器,Student类也有带参数的构造方法,用于设置对象的初始状态。 3. **访问修饰符**:如题目中的`private`关键字,用于限制成员变量或方法的访问权限,确保数据的安全性。 ...

    .net方向企业面试题(内服有答案)

    StringBuilder sb = new StringBuilder(); for (int i = 0; i ; i++) sb.Append(i.ToString()); string result = sb.ToString(); ``` #### 4. XML与Html的区别 - **XML**(eXtensible Markup Language)是一...

    C#面試題

    6. 利用`operator`声明且仅声明了`==`,会有一个错误,因为重载了`"=="`就必须重载`"!="`以保持一致性。 7. 委托声明的关键词是`__?(delegate)`。委托在C#中是一种类型,它代表了一组方法的签名,可以用来传递...

    asp.net查找记录是否存在

    StringBuilder strSql = new StringBuilder(); strSql.Append("select count(1) from tbl_JW_Score"); strSql.Append("where"); strSql.Append("CourseID=@CourseID and"); strSql.Append("StudentID=@...

    java 给字符串编号

    5. **方法重载**:根据需求,可以创建一个自定义方法,如`public String numberString(String input, int length)`,其中`length`参数表示编号的位数。 6. **递归**:如果字符串编号涉及到嵌套或层级,递归方法可能...

    CLR.via.C#.(中文第3版)(自制详细书签)Part2

    14.4 获取对象的字符串表示:ToString 14.4.1 指定具体的格式和语言文化 14.4.2 将多个对象格式成一个字符串 14.4.3 提供定制格式化器 14.5 解析字符串来获取对象:Parse 14.6 编码:字符和字节的相互转换 ...

    提高代码质量的方法.

    - 避免使用带有变长参数的方法重载,可能导致调用混乱。 - 了解并遵循Java的覆写规则,如变长参数的方法重载需谨慎。 - 注意自增操作符的副作用,避免潜在的并发问题。 - 尽量少用静态导入,避免命名冲突。 - ...

    2020 兴业银行Java笔试题

    String reversedStr = new StringBuilder(strN).reverse().toString(); int symmetric = Integer.parseInt(reversedStr); int diff1 = Math.abs(n - symmetric); int diff2 = Math.abs(n - (symmetric + 1)); ...

Global site tag (gtag.js) - Google Analytics