6

最近、次のようなメソッドを含む WinRT クラス定義がありました。

public void Foo(string x){}
public void Foo(CustomClass x){}

コンパイラはエラーをスローしましたが、

Earlz.FooBar の 1 パラメーター オーバーロードには、Windows.Foundation.Metadata.DefaultOverloadAttribute で装飾することにより、既定のオーバーロードとして指定されたメソッドが 1 つだけ必要です。

この属性にはどのような意味がありますか? 私は WinRT プロジェクションがどのように機能するかについてよく知りませんが、私が書いているものは、最終的には一般に使用可能な API になります。だから、APIを使う人に苦痛を与えるようなことはしないようにしたいです。Fooメソッドの名前を変更する必要がFooCustomありますか、またはより一般的に使用される関数で DefaultOverload を使用していますか?

また、この属性が何をするのか、なぜそれが必要なのかを調べてみましたが、MSDNは相変わらず詳細が不足しており、「メソッドがデフォルトのオーバーロードメソッドであることを示します」という一文の説明しかありませんでした。

この属性の主な理由は、Javascript がパラメーターの型ではなく、パラメーターの数のオーバーロードのみをサポートしているためだと思います。ただし、Javascript アプリは、型のオーバーロードを使用して既定以外の WinRT メソッドにどのようにアクセスするのでしょうか?

4

1 に答える 1

5

Jesse Jiang がこのスレッドで説明したように:

JavaScript では、オーバーロードされたメソッドを区別する能力が限られています。したがって、関数名を変更するか、Windows::Foundation::Metadata::DefaultOverloadAttribute を設定して既定のオーバーロード関数を設定する必要があります。

于 2013-01-22T18:46:47.757 に答える