C# Console.WriteLine()如何知道如何将对象转换为字符串
我将遵循以下步骤,其中解释作为值或引用类型传递的参数。第一个示例具有以下代码:C# Console.WriteLine()如何知道如何将对象转换为字符串,c#,console-application,C#,Console Application,我将遵循以下步骤,其中解释作为值或引用类型传递的参数。第一个示例具有以下代码: using System; using System.Text; public class Example1 { public static void Main (string[] args) { StringBuilder first = new StringBuilder(); StringBuilder second = first; first
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(second)如何仅通过使用标识符返回字符串值。是否可以在构造函数中返回值
我试图通过以下方式编写类或结构(但不起作用):
StringBuilder
是System.Text
命名空间中的.net类。StringBuilder
是类,而不是结构。C在这方面不像C++,实际上两者不同。和Console.WriteLine(x)
其中x是一个任意类,最终成为Console.WriteLine(x.ToString())
重写对象字符串表示的方法
public override string ToString()
{
return _myString;
}
或打印出您的财产:
Console.WriteLine (second.StringBuilder);
查看控制台的WriteLine(对象值)
。上面说:
调用值的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);
StringBuilder在System.Text命名空间中定义。我不知道你为什么要重新定义它。由于在程序中使用System.Text命名空间,可能会遇到命名冲突。什么东西对你不起作用?@EricJ。我是.NET和C#的新手,不知道StringBuilder是一个.NET类;所以,通过阅读这个例子,我试着写下这个课程。无论如何,我仍然很好奇StringBuilder的对象如何在不调用ToString()方法的情况下打印出来?我不知道StringBuilder是一个.NET类。不管怎么说,我仍然很好奇,调用对象本身如何能够在不调用方法“ToString()”的情况下打印出字符串@KMC:他刚刚告诉过你。调用控制台.WriteLine
函数并传入类的任意实例时,调用ToString
函数以获取对象的文本表示。正确,但不回答问题是的,这是OP问题的真实答案。C#中的每个对象(以及所有类型的变量,因为所有对象都继承自对象)都有一个内置的ToString函数,在这种情况下隐式调用该函数。有关对象及其成员,请参见此处:
Example ex = new Example("test");
Console.WriteLine(ex);