c# – 无法访问非静态字段

栏目: ASP.NET · 发布时间: 6年前

内容简介:我们努力提供准确的错误消息,因此请仔细阅读.错误消息告诉您确切的错误:您正在访问上下文中的非静态字段,其中只有合法访问静态.那么为什么基础构造函数调用参数列表是一个只有合法访问静态的上下文?当您调用基础构造函数时,您传递的参数不得引用“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


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Effective Ruby:改善Ruby程序的48条建议

Effective Ruby:改善Ruby程序的48条建议

Peter J. Jones / 杨政权、秦五一、孟樊超 / 机械工业出版社 / 2016-1 / 49

如果你是经验丰富的Rub程序员,本书能帮助你发挥Ruby的全部力量来编写更稳健、高效、可维护和易执行的代码。Peter J.Jones凭借其近十年的Ruby开发经验,总结出48条Ruby的最佳实践、专家建议和捷径,并辅以可执行的代码实例。 Jones在Ruby开发的每个主要领域都给出了实用的建议,从模块、内存到元编程。他对鲜为人知的Ruby方言、怪癖、误区和强力影响代码行为与性能的复杂性的揭......一起来看看 《Effective Ruby:改善Ruby程序的48条建议》 这本书的介绍吧!

JS 压缩/解压工具
JS 压缩/解压工具

在线压缩/解压 JS 代码

随机密码生成器
随机密码生成器

多种字符组合密码

XML 在线格式化
XML 在线格式化

在线 XML 格式化压缩工具