字段初始值设定项无法引用非静态成员:详细说明
尝试使用字段初始值设定项初始化类的字段时,遵守某些限制很重要。正如问题所指出的,在字段初始值设定项中引用非静态成员会导致错误。
提供的代码说明了 Service 类中的此问题:
public class Service { DinnerRepository repo = new DinnerRepository(); // Error: Cannot reference non-static member `repo` Dinner dinner = repo.GetDinner(5); }
发生错误是因为字段不允许初始值设定项引用类的非静态成员。这包括实例变量、方法和属性。
替代解决方案:
答案中提出的替代解决方案包括:
使用构造函数初始化:
public class Service { private readonly DinnerRepository repo; private readonly Dinner dinner; public Service() { repo = new DinnerRepository(); dinner = repo.GetDinner(5); } }
使用本地变量:
public class Service { DinnerRepository repo; Dinner dinner; public Service() { repo = new DinnerRepository(); dinner = repo.GetDinner(5); } }
但是,需要注意的是后一种方法仅创建局部变量而不是实例
字段初始值设定项的限制:
根据 C# 4 规范(第 10.5.5.2 节),字段初始值设定项无法引用正在创建的实例。因此,禁止在字段初始值设定项中通过简单名称直接引用实例成员。
总结:
为了避免“字段初始值设定项无法引用非静态字段” 、方法或属性”错误,因此有必要了解字段初始值设定项的限制并采用适当的替代方法,例如构造函数初始化或使用局部变量。这些替代方案允许正确初始化类的实例成员。
以上是为什么我无法在 C# 字段初始值设定项中引用非静态成员?的详细内容。更多信息请关注PHP中文网其他相关文章!