c# - 字段初始值设定项不能引用非静态字段方法或属性
问题描述:
对C#和OOP来说很新颖。我正在尝试创建一个名为“Human”的类,并进行一些信息初始化。但是,我收到以下错误a field initializer cannot reference the nonstatic field method or property
。试图继承人创建full_name
变量c# - 字段初始值设定项不能引用非静态字段方法或属性
“简单”的代码,当在FIRST_NAME和姓氏错误信息点
namespace World
{
public class Human
{
// Personal traits
public string first_name;
public string last_name;
public string full_name = first_name + " " + last_name;
}
}
我究竟在做什么错?我不明白它..
答
可以实现它的属性,返回字符串计算在其吸气剂
namespace World
{
public class Human
{
// Personal traits
public string first_name;
public string last_name;
public string full_name { get { return first_name + " " + last_name}};
}
}
是否有您使用书写构件名称的这样一个原因吗?通常我会做它像这样:使用PascalCasing
namespace World
{
public class Human
{
// Personal traits
public string FirstName {get; set;}
public string LastName {get; set;}
public string FullName => $"{FirstName} {LastName}"; // C#7 notation notation
}
}
公共属性,私立学校的驼峰规则是“正常的”,根据MS,甚至会产生VS2017
答
暗示它不会工作的原因是因为所有你的属性是nonstatic,这意味着它们是实例的值。因此,它们将设置在创建的类的每个新实例上。想象一下,你新的你的类
- Memorey分配
- 默认属性设置
- 调用构造函数
所以,你所示的代码将步骤2在这过程中运行时间没有this
,还没有实例以供参考。但那就是你说的时候你在做什么。
Public String FullName = FirstName + LastName;
这将是更完全合格的
Public String FullName = this.FirstName + this.LastName
这仍然是不正确的,但它更多的描述和展示了真正的问题。在这行代码运行的时候,还没有一个self/this引用。
解决方案 您有很多选择。帕特里克·阿特纳在他的回答中很好地解决了这个问题
谢谢@aominè –
谢谢你的帮助!我通常喜欢使用所有小写变量名和_之间的变量名。这就是全部:P – Dean