首页 >后端开发 >C++ >为什么不能使用另一个非静态字段初始化类字段?

为什么不能使用另一个非静态字段初始化类字段?

Linda Hamilton
Linda Hamilton原创
2025-01-01 10:48:10374浏览

Why Can't I Initialize a Class Field Using Another Non-Static Field?

了解类实例中的字段初始化器

设计类时,使用适当的值初始化字段(尤其是非静态字段)至关重要。当您尝试通过直接访问非静态类成员来初始化类中的实例变量时,会出现此错误消息“字段初始值设定项无法引用非静态字段、方法或属性”。

在根据您的具体情况,Service 类包含一个使用dinnerrepository 类的实例初始化的字段以及检索到的dinner 对象的后续分配。但是,这种方法会导致上述错误。

字段初始化的替代解决方案

字段初始化的一种替代方法是使用实​​例构造函数来设置实例值。通过在 Service 类中声明一个构造函数并初始化其中的 DiningRepository 和 Dining 字段,您可以仅在创建 Service 实例时初始化这些字段:

public class Service
{
    private readonly DinnerRepository repo;
    private readonly Dinner dinner;

    public Service()
    {
        repo = new DinnerRepository();
        dinner = repo.GetDinner(5);
    }
}

在这种情况下,这些字段是在对象期间初始化的实例化,确保服务实例在应用程序中使用之前已完全设置。

另一个选项是延迟初始化方法和属性中的字段。您可以创建在需要时检索值的方法或属性,而不是初始化构造函数中的字段。这种方法可以更好地控制何时以及如何填充数据。

通过遵循这些准则,您可以有效地初始化类实例中的非静态字段,避免出现错误“字段初始值设定项无法引用非静态字段”。 -静态字段、方法或属性。”

以上是为什么不能使用另一个非静态字段初始化类字段?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn