内容简介:我们努力提供准确的错误消息,因此请仔细阅读.错误消息告诉您确切的错误:您正在访问上下文中的非静态字段,其中只有合法访问静态.那么为什么基础构造函数调用参数列表是一个只有合法访问静态的上下文?当您调用基础构造函数时,您传递的参数不得引用“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
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:- 为什么 C# 的 string.Empty 是一个静态只读字段,而不是一个常量呢?
- springboot~DTO字符字段与日期字段的转换问题
- Protocol Buffers 学习(2):字段类型和其他语言字段类型之间的映射
- Protocol Buffers 学习(2):字段类型和其他语言字段类型之间的映射
- PHPRAP 2.0.2 发布,接口和字段数据分离,字段使用单独数据表
- 如何正确新增字段
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。