2017-11-25 93 views
-2

对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; 
    } 
} 

我究竟在做什么错?我不明白它..

回答

2

可以实现它的属性,返回字符串计算在其吸气剂

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

+1

谢谢@aominè –

+0

谢谢你的帮助!我通常喜欢使用所有小写变量名和_之间的变量名。这就是全部:P – Dean

1

暗示它不会工作的原因是因为所有你的属性是nonstatic,这意味着它们是实例的值。因此,它们将设置在创建的类的每个新实例上。想象一下,你新的你的类

  1. Memorey分配
  2. 默认属性设置
  3. 调用构造函数

所以,你所示的代码将步骤2在这过程中运行时间没有this,还没有实例以供参考。但那就是你说的时候你在做什么。

Public String FullName = FirstName + LastName; 

这将是更完全合格的

Public String FullName = this.FirstName + this.LastName 

这仍然是不正确的,但它更多的描述和展示了真正的问题。在这行代码运行的时候,还没有一个self/this引用。

解决方案 您有很多选择。帕特里克·阿特纳在他的回答中很好地解决了这个问题

相关问题