3

COMに公開したいC#.Net2.0で記述された小さなフレームワークがあります。

問題は、次のように公開されるいくつかの汎用クラスがあることです。

interface IOurClass
{
  ReadonlyCollection<IOurListObject> OurCollection
  {
    get;
  }
}

interface IOurListObject
{
  //Some properties that don't matter
}

ジェネリックコレクションをCOMに公開するための最良の(または推奨される方法)は何ですか?ジェネリックスをサポートする必要はありません。IOurListObjectのコレクションを何らかの方法で公開する必要があります。

また、使用するコレクションごとに新しいクラスを作成する必要はありませんが、それができない場合があります。

4

2 に答える 2

7

ジェネリックコレクション(または「ジェネリック」である他のもの)をCOMに公開することはできません。

したがって、COMに表示されるインターフェイスで非ジェネリックプロパティ(またはメソッド)を作成することをお勧めします。このメソッドは、「IOurListObject」アイテムの配列を返す可能性があります。クラスでは、このメソッドを明示的に実装して、たとえばCOMの外部でオブジェクトを直接参照するときにインテリセンスに表示されないようにすることができます。

私は自分自身を少し明確にしたいと思います。

例:

[ComVisible(true)]
public interface IOurClass
{
    IOurListObject[] OurCollection { get; }
}

public class OurClass : IOurClass
{
    IOurListObject[] IOurClass.OurCollection { get { return OurCollection.ToArray();} }

    public ReadOnlyCollection<IOurListObject> OurCollection { ... }
}
于 2009-12-07T20:03:24.690 に答える
2

この投稿をチェックしてください。単純な配列を使用するか、ArrayListを使用してください。一歩後退したように見えますが、ジェネリックコレクションはCOMではうまく機能しません。

于 2009-12-07T20:01:16.677 に答える