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

本文关键字:对象 转换 字符串 何知道 WriteLine Console | 更新日期: 2023-09-27 18:19:13

我遵循前言:什么是引用类型?其中解释了作为值或引用类型传递的参数。第一个示例的代码如下:

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;
    }
}

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

查看Console.WriteLine(object value)的文档。它是这样写的:

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

因此(正如其他人所写的),如果您想打印自己的类或结构的字符串表示形式,您应该重写ToString()方法。

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

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

public override string ToString()
{
  return _myString;
}

或者打印出你的属性:

Console.WriteLine (second.StringBuilder);

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

代码所做的是在StringBuilder实例上调用ToString。如果显式调用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);