-4

次のコードを static 関数に記述すると、need non-static エラーが発生しました

非静的フィールド、メソッド、またはプロパティにはオブジェクト参照が必要です

静的関数で書けないものをラップして静的関数で書けるようにすることはできますか?

サンプルコードを使用してコンパイルできません

 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);

接続オブジェクトのインスタンスを 1 つだけ維持することはお勧めできません。必要なたびに、新しいインスタンスを作成し、接続を開き、クエリを実行して破棄します。より多くの文脈を見なければ、あなたが本当に欲しいものについて明確な答えを出すのは難しい. あなたの問題に対するより良い解決策への盲目的な推測:

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

接続オブジェクトを使用してクエリを実行し、そこから破棄します。

于 2013-06-13T11:07:28.147 に答える