C# 传入参数的名称与字段名称相同
这个人的名字是空的。这可以使用C# 传入参数的名称与字段名称相同,c#,C#,这个人的名字是空的。这可以使用This.name=name 人名为空(空字符串)的原因是什么 class Person { public string name; public void SetName(string name) { name = name; } } public void static Main(string[] args) { Person aPerson = new Person(); aPerson.SetName("
This.name=name代码>
人名为空(空字符串)的原因是什么
class Person
{
public string name;
public void SetName(string name)
{
name = name;
}
}
public void static Main(string[] args)
{
Person aPerson = new Person();
aPerson.SetName("ruby");
Console.WriteLine("person name is {0}}, aPerson.name);
}
只是将参数的值赋回自身。换句话说,这是禁止的
如果将其更改为:
name = name;
然后将参数的值指定给您想要的字段
但是,当前人员的姓名字段不会引用空字符串-它将是空引用。这两者之间有很大的区别
(当然,通常不应该有公共字段,应该使用属性而不是SetName
方法。)在方法中
this.name = name;
您不设置公共字段,而是设置参数。要设置公共字段,应使用
public void SetName(string name)
{
name = name;
}
更好的方法是使用属性:
public void SetName(string name)
{
this.name = name;
}
如果不使用this
关键字,您只需将name参数的值重新分配给参数本身。this
关键字为您提供了要处理的实例
更好的方法可能是
private string name;
public string Name
{
get { return this.name; }
set { this.name = value; }
}
有些人喜欢在私有成员字段中使用下划线
class Person
{
public string Name { get; private set; }
public Person(string name)
{
Name = name;
}
}
您正在将输入参数(名称)分配给自身。通过使用this.name=name,可以将输入参数(name)显式分配给成员变量(this.name)。请注意,使用成员变量的命名方案可以更容易地将它们与局部变量区分开来,这是非常常见的,例如,在它们前面加下划线或“m_3;”。但是,这会有所不同。在SetName方法中,当您使用This时,您将变量设置为传入变量,而传入变量不起任何作用。属性,它将在类级别而不是传入参数中设置名称。只需稍微修改代码,问题可能更容易发现:
private string _name;
分配theName=theName
显然不会更改要设置的数据成员name
。因此,您必须使用:
class Person
{
public string name;
public void SetName(string theName)
{
theName = theName;
}
}
@乔恩:将参数赋值回自身,你能告诉它是如何发生的,以及这将如何创建一个空值吗reference@Raghav55:您只是在分配一个值,仅此而已。假设它是一个int
变量:你说的是“让变量的值……变量的值”。所以它没有任何用处。@Jon:但是为什么空引用是set@Raghav55:字段的默认值为空引用。由于原始代码没有为该字段分配任何其他值,因此您得到了一个空引用。@jon:很抱歉,有许多问题是public void SetName(string name){name=name},因此编译器将传入的参数视为局部变量,但为什么没有给出编译错误这不是一个真正的问题?这是一个新手问题,但这是一个真正的新手问题。
this.name = theName;