5

解決済み: IntelliSense で拡張機能が表示されない!

F# で次の拡張メソッドを取得したとします。

[<Extension>]
module Extension =
    [<Extension>]
    let Increment(value : System.Int32) = value + 1

C# では、次のように呼び出すことができます。

x.Increment(); //Result x=1

しかし、これに相当する VB コードはエラーを返します。整数型の拡張メソッドが見つかりません。

x.Increment() 'No method called "Increment()" for type Int32

標準的な方法でメソッドを呼び出すことは可能ですが:

Increment(x) 'Works

では、F# コードを呼び出す際の VB と C# の処理の違いはどこにあり、なぜ VB 環境は拡張メソッドを解決できないのでしょうか?

4

1 に答える 1

4

通常の F# ライブラリ プロジェクトをビルドする場合

namespace A
open System.Runtime.CompilerServices
[<Extension>]
module Extension =
    [<Extension>]
    let Increment(value : System.Int32) = value + 1

次に、VB プロジェクトからこのライブラリを参照します。

Imports A.Extension
Module Module1
    Sub Main()
        Console.WriteLine((1).Increment())
    End Sub
End Module

次に、VB は F# 拡張メソッドを期待どおり<Extension>Public Function Increment() As Integerに処理し、正しく動作して、2出力として提供します。

クリーンな実験では、F# 定義の拡張メソッドに対する VB 固有の特異性は示されません

于 2013-06-17T17:31:53.673 に答える