Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/280.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Console.WriteLine()如何知道如何将对象转换为字符串_C#_Console Application - Fatal编程技术网

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