首页 >后端开发 >C++ >为什么我无法在 C# 字段初始值设定项中引用非静态成员?

为什么我无法在 C# 字段初始值设定项中引用非静态成员?

Susan Sarandon
Susan Sarandon原创
2024-12-31 08:31:081006浏览

Why Can't I Reference Non-Static Members in C# Field Initializers?

字段初始值设定项无法引用非静态成员:详细说明

尝试使用字段初始值设定项初始化类的字段时,遵守某些限制很重要。正如问题所指出的,在字段初始值设定项中引用非静态成员会导致错误。

提供的代码说明了 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中文网其他相关文章!

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