字段初始化歧义:服务类中的非静态字段引用
在软件开发中,我们经常需要初始化类中的实例字段利用它们的功能。但是,尝试使用对另一个类中的非静态字段、方法或属性的引用来初始化实例字段将导致错误“字段初始值设定项无法引用非静态字段、方法或属性。”
考虑以下示例,其中我们有一个 DiningRepository 类和一个 Service 类:
public class DinnerRepository { DinnerDataContext db = new DinnerDataContext(); public Dinner GetDinner(int id) {...} } public class Service { DinnerRepository repo = new DinnerRepository(); Dinner dinner = repo.GetDinner(5); }
尝试编译此代码将引发上述错误。这是因为 Service 类中晚餐的字段初始值设定项引用了非静态的存储库实例。字段初始值设定项的范围有限,无法访问特定于实例的成员。
解决此问题的一种常见解决方案是将初始化推迟到执行构造函数之后。但是,这种方法创建的是局部变量而不是实例变量。
首选解决方案是在构造函数中初始化字段,允许隐式引用 this 实例。这种方法创建具有所需行为的实例变量:
public class Service { private DinnerRepository repo; private Dinner dinner; public Service() { repo = new DinnerRepository(); dinner = repo.GetDinner(5); } }
通过了解字段初始值设定项的限制,开发人员可以避免这种常见错误并有效管理代码中的实例变量。
以上是为什么无法在 C# 中引用另一个非静态字段来初始化非静态字段?的详细内容。更多信息请关注PHP中文网其他相关文章!