内容简介:我们努力提供准确的错误消息,因此请仔细阅读.错误消息告诉您确切的错误:您正在访问上下文中的非静态字段,其中只有合法访问静态.那么为什么基础构造函数调用参数列表是一个只有合法访问静态的上下文?当您调用基础构造函数时,您传递的参数不得引用“this”.为什么?因为你的“this”的派生构造函数和基础构造函数都没有运行,因此“this”几乎肯定处于不一致的,部分初始化的状态.这是一个疯狂的错误的秘诀.因此,我们限制您访问“this”,直到我们知道至少基本构造函数已运行.
我无法弄清楚为什么它在寻找静态的东西:
public class DatabaseBase
{
private readonly string connectionString;
public DatabaseBase(string connectionString)
{
this.connectionString = connectionString;
}
}
public class MyDB : DatabaseBase
{
readonly string connectionString = ConfigurationManager.AppSettings["MyConnectionString"];
public MyDB() : base(connectionString)
{
}
}
我得到静态上下文中无法访问非静态字段’connectionString’.我在基础数据库类中看不到任何静态,为什么?
这是另一个我们做同样事情的例子:
partial class Database : DatabaseBase
{
static string DbConnectionString
{
get
{
if (dbConnectionString == null)
dbConnectionString =
ConfigurationManager.AppSettings["MyConnectionString"];
return dbConnectionString;
}
}
public Database() :base(DbConnectionString)
{
}
好吧,为什么它必须是连接字符串传递的静态字符串?
我们努力提供准确的错误消息,因此请仔细阅读.错误消息告诉您确切的错误:您正在访问上下文中的非静态字段,其中只有合法访问静态.
那么为什么基础构造函数调用参数列表是一个只有合法访问静态的上下文?
当您调用基础构造函数时,您传递的参数不得引用“this”.为什么?因为你的“this”的派生构造函数和基础构造函数都没有运行,因此“this”几乎肯定处于不一致的,部分初始化的状态.这是一个疯狂的错误的秘诀.因此,我们限制您访问“this”,直到我们知道至少基本构造函数已运行.
此功能鼓励合理,有序,易懂,可维护和无错误的构造逻辑;我建议与这些保障措施合作,而不是反对.
翻译自:https://stackoverflow.com/questions/1430787/cannot-access-non-static-field
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
零基础学Java Web开发
刘聪 编 / 机械工业出版社 / 2008-1 / 59.00元
《零基础学Java Web开发:JSP+Servlet+Sfruts+Spring+Hibernte》全面讲解Java Web应用开发的编程技术,并详细介绍Java Web开发中各种常用的技术,可作为Java Web开发技术的学习指南。 《零基础学Java Web开发:JSP+Servlet+Sfruts+Spring+Hibernte》共17章,分为3篇,其中第1~12章是基础篇,讲解了......一起来看看 《零基础学Java Web开发》 这本书的介绍吧!