字段初始值设定项不能引用ASP.Net MVC控制器中的非静态字段、方法或属性

本文关键字:字段 控制器 静态 属性 方法 MVC Net 引用 不能 ASP | 更新日期: 2023-09-27 18:29:04

我有一个从MVC控制器-继承的BaseController类

public abstract class BaseController : Controller
{
    protected int A= Convert.ToInt32(ConfigurationManager.AppSettings["A"]);
    protected int B= Convert.ToInt32(ConfigurationManager.AppSettings["B"]);
    protected int C= A* B;
}

它在编译过程中给出错误A field initializer cannot reference the non-static field, method, or property

我没有任何构造函数。这就是这个类的全部代码。有什么帮助吗?

字段初始值设定项不能引用ASP.Net MVC控制器中的非静态字段、方法或属性

错误消息与您试图将A*B的值分配给C有关。

尝试创建一个执行赋值操作的受保护构造函数,确保您的子类然后调用此基构造函数。

由于BaseController是一个抽象类,因此无法创建该类的实例。所以,不能调用抽象类的构造函数。但是您必须有一个构造函数才能运行以下代码。

protected int C= A* B;

所以,创建抽象或基类的构造函数并从派生类调用基类构造函数的唯一方法,如下所示。

public DerivedClass() : base() {
    // Do additional work here otherwise you can leave it empty
}
简而言之,字段初始化程序在继承链中的任何构造函数之前运行。因此,当时对象还没有从这个意义上构建,因此不能使用非静态成员。

查看这个相关的多次引用文章

如果这些是一些初始值,则一种解决方案是重构A*B赋值以直接使用配置参数。