gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 18:02:12 25 4
gpt4 key购买 nike

我不明白为什么它要寻找静态的东西:

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”。

此功能鼓励合理、有序、可理解、可维护且无错误的构造逻辑;我建议使用而不是反对这些保护措施。

关于c# - 无法访问非静态字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1430787/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com