Console.WriteLine()如何知道如何将对象转换为字符串

时间:2012-01-03 07:28:51

标签: c# console-application

我正在关注Preamble: what is a reference type?,它解释了作为值或引用类型传递的参数。第一个示例包含以下代码:

using System;
using System.Text;

public class Example1
{
    public static void Main (string[] args)
    {
        StringBuilder first = new StringBuilder();
        StringBuilder second = first;
        first.Append ("hello");
        first = null;
        Console.WriteLine (second);
    }
}

它没有提供StringBuilder的类(或结构)的源代码,我不知道Console.WriteLine(第二个)如何只使用标识符返回字符串值。是否可以在构造函数中返回一个值?

我尝试通过以下方式编写类或结构(并且它不起作用):

struct StringBuilder
{
    private string _myString;
    public string StringBuilder
    {
        get { return _myString; }
        set { _myString = value; }
    }
    public void Append(string str)
    {
        _myString = str;
    }
}

5 个答案:

答案 0 :(得分:4)

StringBuilderSystem.Text命名空间中的.net类。

答案 1 :(得分:3)

覆盖对象字符串表示的ToString方法。

public override string ToString()
{
  return _myString;
}

或打印出您的财产:

Console.WriteLine (second.StringBuilder);

答案 2 :(得分:3)

查看Console.WriteLine(object value)的{​​{3}}。它说:

  

调用ToString value方法来生成其字符串   表示,并将结果字符串写入标准   输出流。

所以(正如其他人写的那样),如果你想打印自己的类或结构的字符串表示,你应该覆盖documentation方法。

答案 3 :(得分:2)

StringBuilderclass,而不是struct。在这方面,C#与C ++不同:这两者实际上是不同的。其中x是任意类的Console.WriteLine(x)最终为Console.WriteLine(x.ToString())

答案 4 :(得分:2)

代码的作用是在ToString实例上调用StringBuilder。如果您明确调用ToString而不是让它被隐式调用,则代码会更清晰:

Console.WriteLine(second.ToString());

您可以覆盖自己班级中的ToString方法。顺便说一下,如果你有特殊的需要,你应该只使用结构。结构更难以正确实现。

示例:

class Example {

  public string Value { get; set; }

  public Example(string value) {
    Value = value;
  }

  public override string ToString() {
    return Value;
  }

}

现在,对象的字符串值将是其值:

Example ex = new Example("test");
Console.WriteLine(ex);