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