簡體   English   中英

字段初始化程序無法引用ASP.Net MVC Controller中的非靜態字段,方法或屬性

[英]A field initializer cannot reference the non-static field, method, or property in ASP.Net MVC Controller

我有一個繼承自MVC Controller的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在編譯期間A field initializer cannot reference the non-static field, method, or property

我沒有任何構造函數。 這是此類的完整代碼。 有什么幫助嗎?

該錯誤消息與您嘗試為C分配A * B的值有關。

嘗試創建一個執行賦值操作的受保護構造函數,確保您的子類隨后調用此基本構造函數。

由於BaseController是抽象類,因此無法創建該類的實例。 因此,您不能調用抽象類的構造函數。 但是您必須具有一個構造函數才能運行以下代碼。

protected int C= A* B;

因此,創建抽象或基類構造函數並從派生類調用基構造函數的唯一方法如下所示。

public DerivedClass() : base() {
    // Do additional work here otherwise you can leave it empty
}

簡而言之,字段初始化程序在繼承鏈中的任何構造函數之前運行。 因此,那時還沒有以這種方式構造對象,因此不能使用非靜態成員。

查看此相關的多次引用文章

如果這些是一些初始值,則一種解決方案是重構A*B分配以直接使用配置參數。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM