0

私は vb.net コードを C# に変換しようとしていますが、関数の 1 つでオプションに遭遇しました。

Private Function doOpenConnection(ByRef cn As OleDb.OleDbConnection, ByRef cmd As OleDb.OleDbCommand, ByVal sConnString As String, Optional ByVal sUSP As String = "") As Boolean

オーバーロードを使用する代わりに、VB.Net にはそれを 1 つのメソッド/関数に作成するオプションがあるようです。C# にも同様の同等のものがありますか、それとも可能性ごとにメソッドを作成する必要がありますか?

4

2 に答える 2

1

C#ではオプションのパラメーターを使用できます。

MSDN から:

オプションの各パラメータには、その定義の一部としてデフォルト値があります。そのパラメーターに引数が送信されない場合は、デフォルト値が使用されます。デフォルト値は、次のタイプの式のいずれかである必要があります。

  • 定数式;

  • new ValType() 形式の式。ここで、ValType は列挙型や構造体などの値型です。

  • default(ValType) の形式の式。ここで、ValType は値の型です。

オプションのパラメーターは、必須パラメーターの後に、パラメーター リストの最後で定義されます。呼び出し元が一連のオプション パラメータのいずれかに引数を指定する場合は、先行するすべてのオプション パラメータに引数を指定する必要があります。引数リスト内のカンマ区切りのギャップはサポートされていません。たとえば、次のコードでは、インスタンス メソッド ExampleMethod が 1 つの必須パラメーターと 2 つのオプション パラメーターで定義されています。

    public void ExampleMethod(int required, string optionalstr = "default string",
        int optionalint = 10)
    {
        Console.WriteLine("{0}: {1}, {2}, and {3}.", _name, required, optionalstr,
            optionalint);
    }
于 2012-06-26T15:34:38.417 に答える
1

C# には、C# 4 と同等のものがあります。

private bool doOpenConnection(ref OleDb.OleDbConnection cn,
                              ref OleDb.OleDbCommand cmd,
                              string sConnString,
                              string sUSP = "")

ここでは最初の 2 つのパラメーターはおそらく必要ないことに注意してください。C #でパラメーターの受け渡しがどのように機能refするかを理解しておくことが重要です。

C# 4 には、名前付き引数省略可能なパラメーターの両方があります。詳細については、 MSDNを参照してください。オプションのパラメーターは (パラメーター配列を除いて) 必須のパラメーターの前に配置する必要があり、既定値は定数でなければならない (またはdefault(...)演算子を使用できる) など、さまざまな制限があることに注意してください。

于 2012-06-26T15:34:08.910 に答える