-4

在静态函数中编写以下代码时,需要非静态错误

非静态字段、方法或属性需要对象引用

是否可以包装一些不能用静态函数编写的东西,使其可以用静态函数编写?

无法编译我使用示例代码

 private static bool OpenConnection()
    {
        try
        {
            connection.Open();
            return true;
        }catch(Exception ex) {}
    }
4

1 回答 1

0

您不能从静态函数访问非静态成员。非静态成员与类的实例相关联,而静态成员与类本身相关联。

您的选择是:

static IDbConnection connection; //<- note the static keyword
private static bool OpenConnection()
{
    try
    {
        connection.Open();
        return true;
    }catch(Exception ex) {}
}

无论如何,这是一个非常糟糕的方法。

否则使整个事情非静态:

IDbConnection connection; //<- now its an instance member.
private bool OpenConnection()
{
    try
    {
        connection.Open();
        return true;
    }catch(Exception ex) {}
}

可能你应该传递正确的连接对象实例来打开它。就像是:

private static bool OpenConnection(IDbConnection connection)
{
    try
    {
        connection.Open();
        return true;
    }catch(Exception ex) {}
}

现在你可以打电话Class.OpenConnection(someConnection);

维护连接对象的单个实例不是一个好主意。每次你想要它时,只需创建一个新实例,打开连接,查询并处理掉。如果没有看到更多的上下文,很难就你真正想要什么给出明确的答案。盲目猜测您的问题的更好解决方案:

private static IDbConnection GetConnection()
{
    try
    {
        var connection = new WhateverConnection(yourConnectionString);
        connection.Open();
        return connection;
    }catch(Exception ex) {}
}

使用连接对象运行查询,并从那里处理它。

于 2013-06-13T11:07:28.147 回答