9

これに似ていますが、ひねりがあります。

VB 関数宣言:

Public Shared Function MyFunc(ByVal Name As String, ByVal Num As Integer, Optional ByRef obj As Object = Nothing, Optional ByVal val As Integer = 0) As Boolean

C#で呼び出す場合(別のソリューション、私はコピーしました.dll

エラー 164 メソッド 'MyFunc' のオーバーロードは 2 つの引数を取らない

メタデータは、関数が次のようであることを示しています。

public static bool MyFunc(string Name, int Num, ref object obj, int val = 0);

一方は成功し、もう一方は失敗したのはなぜOptionalですか?

4

2 に答える 2

10

refC# は省略可能なパラメーターをサポートしていません。パラメータに変更すればobj問題ないはずです。ByValue

C# でオプションのパラメーターを宣言しようとするrefと、C# 4 仕様のセクション 10.6.1 に違反します。

default-argumentを持つ固定パラメーターは、オプションのパラメーターと呼ばれます。

...

refまたはパラメータにdefault-argumentを指定するoutことはできません。

これに対する例外は、refパラメーターが非常に一般的な COM の場合です。C# コンパイラは、COM コンポーネントを処理していることを認識すると、省略可能なパラメーターを省略できるようになりrefます。

于 2013-07-18T08:04:18.620 に答える
5

C# では、by-ref オプション パラメーターを使用できません。それが理由です。

この他の質問と回答を参照してください:

于 2013-07-18T08:05:08.013 に答える