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(object value)
的文档。它是这样写的:
调用value的ToString
方法来生成它的字符串表示,并将结果字符串写入标准输出流。
因此(正如其他人所写的),如果您想打印自己的类或结构的字符串表示形式,您应该重写ToString()方法。
StringBuilder
是System.Text
命名空间中的。net类。
覆盖ToString
方法用于对象字符串表示。
public override string ToString()
{
return _myString;
}
或者打印出你的属性:
Console.WriteLine (second.StringBuilder);
StringBuilder
是class
,不是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);