我对使用C ++和HTML的轻量级背景的C#编程非常陌生,所以我几乎从头开始。我正在寻找msdn教程,特别是属性教程,到目前为止我只有一部分我不明白。代码中有一部分是这样的:
// person.cs
using System;
class Person
{
private string myName ="N/A";
private int myAge = 0;
// Declare a Name property of type string:
public string Name
{
get
{
return myName;
}
set
{
myName = value;
}
}
// Declare an Age property of type int:
public int Age
{
get
{
return myAge;
}
set
{
myAge = value;
}
}
public override string ToString()
{
return "Name = " + Name + ", Age = " + Age;
}
public static void Main()
{
Console.WriteLine("Simple Properties");
// Create a new Person object:
Person person = new Person();
// Print out the name and the age associated with the person:
Console.WriteLine("Person details - {0}", person);
// Set some values on the person object:
person.Name = "Joe";
person.Age = 99;
Console.WriteLine("Person details - {0}", person);
// Increment the Age property:
person.Age += 1;
Console.WriteLine("Person details - {0}", person);
}
}
并且程序的输出是这样的:
Simple Properties
Person details - Name = N/A, Age = 0
Person details - Name = Joe, Age = 99
Person details - Name = Joe, Age = 100
现在我明白{0}有效地是一个占位符,它引用了代码的一部分,在这种情况下它是“人”,但我不明白这部分是怎么回事:
public override string ToString()
{
return "Name = " + Name + ", Age = " + Age;
}
列在“人”下。我没有像“姓名”和“年龄”那样看到连接。有人可以突出显示连接的代码部分,并可能解释它,如果没有太多要求?非常感谢你提前。
答案 0 :(得分:2)
您正在使用.Net的字符串格式化服务(允许您编写{0}
的代码。
.Net将在您传递的每个对象上调用ToString()
方法将其转换为字符串。 (如果它已经是一个字符串,string.ToString()
将自行返回)
由于您覆盖了类中的ToString()
方法,因此系统会调用它。
答案 1 :(得分:1)
您正在使用字符串格式。 WriteLine
有一个重载,第一个参数是一个格式字符串,所以你做的是:
Console.WriteLine(String.Format("Person details - {0}", person));
Format
方法获取值参数并将它们转换为字符串,然后将它们插入格式字符串中。将任何东西变成字符串的标准方法是调用每个对象都有的ToString
方法。如果要指定将其转换为字符串时的内容,请覆盖ToString
方法。
所以,最后代码的作用与:
相同Console.WriteLine("Person details - " + person.ToString());
答案 2 :(得分:-1)
这不是您问题的严格答案 - 其他人解释了ToString()
如何参与下面。我在这里添加它是因为你说你是C#的新手。
我建议不要使用{0}
方式来格式化你的字符串 - 这是一种非常缓慢的处理方式,只有在C#才能安抚那些期望与printf()
类似的前C程序员。执行
Console.WriteLine ( "Age: " + Age.ToString() );
当您使用{0}
等时,Format()
函数(及其接受此输入样式的变体)首先必须解析输出以检测各种格式选项,然后仍然连接各种格式串起来。
(在我看来,阅读{0}
格式样式也要困难得多,因为如果格式字符串中有5-6个输入参数,则很难在参数列表中找到匹配的输入参数。这只是个人偏好,但这里有一个证明这一点的例子:
Console.WriteLine ( "Details: 1.Age: {0}\n2.First Name: {1}\n3.Last Name: {2}\n",
FirstName, LastName, Age );
你能发现错误吗?这只有3个参数 - 使用5-6(在生产代码中非常常见),很难阅读这种格式。但同样,这是个人偏好。