Override.ToString方法c#

Override.ToString方法c#,c#,C#,好的,我根据一本C编程书(我在这里学习)的练习编写了这个程序,它要求“重写ToString()方法以返回所有数据成员” 我做得对吗?或者我刚刚成功地编写了可编译但不执行任何操作的代码。ToString的目的是什么 我花了大约30分钟看了其他关于这个的帖子,但还没有弄明白,所以我决定做这个 using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ConsoleA

好的,我根据一本C编程书(我在这里学习)的练习编写了这个程序,它要求“重写ToString()方法以返回所有数据成员”

我做得对吗?或者我刚刚成功地编写了可编译但不执行任何操作的代码。ToString的目的是什么

我花了大约30分钟看了其他关于这个的帖子,但还没有弄明白,所以我决定做这个

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication297
{
class Program
{
    static void Main(string[] args)
    {
        String name = "Stormtrooper";
        Employee s = new Employee(name);
        Console.WriteLine("The type of hire is a {0}", s.Name);
        Console.WriteLine("The identification number is {0}", s.Number);
        Console.WriteLine("The date of hire is {0} ABY", s.Date);
        Console.WriteLine("The standard galactic salary is...{0:C}", s.Salary);

    }

    class Employee
    {
        private string _name;
        private string _number;
        private int _date;
        private int _salary;
        public string Name
        {
            get
            {
                return _name;
            }
        }

        public string Number
        {
            get
            {
                return _number;
            }
        }

        public int Date
        {
            get
            {
                return _date;
            }
        }
        public int Salary
        {
            get
            {
                return _salary;
            }
        }
        public Employee(string n)
        {
            _name = n;
            _number = "AA23TK421";
            _date = 4;
            _salary = 800;
        }
    }

    public override string ToString()

    {
        return "_name + _number + _date + _salary".ToString();
    }
}
}

不如试试像这样的东西

public override string ToString()
{
    return String.Format("Name : {0}, number {1}, date {2}, salary {3}",_name,_number,_date,_salary);
}
但它需要成为课堂的一部分

所以

看看

用文本替换指定字符串中的每个格式项 相当于相应对象的值


您返回的字符串仅表示短语
\u name+\u number+\u date+\u salary

您可能想做的是使用这些字段构建一个字符串。如果你想把它们混在一起的话,那就行了,但这是非常不可读的

public override string ToString()
{
    return String.Concat(_name, _number, _date, _salary);
}
然而,更好的方法是使用并包含带有值的标签

public override string ToString()
{
    return String.Format("Name:{0}, Number:{1}, Date:{2}, Salary:{3}",_name, _number, _date, _salary);
}

如果您使用的是C#6或更新版本,则可以使用以下更干净的格式

public override string ToString()
{
    return $"Name:{_name}, Number:{_number}, Date:{_date}, Salary:{_salary}";
}

这与先前的
String.Format
版本的逻辑完全相同。

您可以尝试将输出格式化为一种好的格式。(但未经测试)

重写.ToString()有很多目的,具体取决于上下文。比如说,

  • 有些开发人员在进行调试时喜欢使用格式良好的对象描述,重写.ToString()将允许他们使用某种标识符(例如,对象的Id)进行有意义的描述
  • 一些开发人员喜欢将一些序列化代码放入ToString()方法中
  • 一些开发人员甚至将一些调试代码放入.ToString()方法中,尽管这可能不是一个好的实践

这实际上取决于你的需要。你可以在网上找到一些好的做法,相信网上有很多资源

人们重写
ToString()
方法的原因是对象具有默认的字符串表示形式,通常用于显示给用户或在日志或控制台中,如下所示:

Console.WriteLine(yourClassObject);
YourNamespace.YourClassName
public override string ToString()
{
    return String.Format("This instance of my object has the following: Name = {0}, Number = {1}, Date = {2}, Salary = ${3}", _name, _number, _date, _salary);
}
如果不重写
ToString()
,则其默认实现是返回对象的完全限定名,如下所示:

Console.WriteLine(yourClassObject);
YourNamespace.YourClassName
public override string ToString()
{
    return String.Format("This instance of my object has the following: Name = {0}, Number = {1}, Date = {2}, Salary = ${3}", _name, _number, _date, _salary);
}
通过更改继承的实现(从
System.Object
),您可以制作更好的(读:更漂亮的)表示,如下所示:

Console.WriteLine(yourClassObject);
YourNamespace.YourClassName
public override string ToString()
{
    return String.Format("This instance of my object has the following: Name = {0}, Number = {1}, Date = {2}, Salary = ${3}", _name, _number, _date, _salary);
}
如果您使用的是C#6(或更高版本),请对字符串中的属性名称使用
nameof()
方法,以防属性名称发生更改。您也可以使用
$”
符号,而不是使用
string.Format()

例如:

public override string ToString()
{
    return $"{nameof(Name)}: {_name}";
}

如果您试图“获取”员工的字符串值,则在不过度使用ToString的情况下,例如

var employee1=新员工();
控制台写入线(雇员1)

你会得到的是:

控制台应用程序1.程序+员工

它根本不提供任何信息来帮助您(或UI)显示相关信息

我用
return\u name+\u number+\u date+\u salary
默认为字符串

或者更详细的


返回“Name:”+“Name+”Number:“+”Number+“etc.”

那么您如何理解该任务?您认为它的结果应该是什么?运行此代码时的结果是什么?为什么要费心重写
.ToString()
?(提示:
Console.WriteLine(“s={0}”,s)
的结果是什么?您觉得这个结果有用吗?什么会使结果更有用?
返回$“{name}{number}{date}{salary}”
应该可以。或者甚至可能
String.Format()
@zerkms,只是把它改成了那样。还将包括OP的链接。