3

C# Web アプリケーションでよく使用するインデックス付きプロパティを持つ Delphi Prism クラスがいくつかあります (大規模な Delphi Win32 システムを ASP.Net に移行しています)。私の問題は、インデックス付きのプロパティがクラスの既定のプロパティでない場合、C# がインデックス付きのプロパティを認識できないように見えることです。たぶん私は何か間違ったことをしているかもしれませんが、私は完全に迷っています。

この質問がバグ報告によく似ていることはわかっていますが、バグを報告する前に、他の誰かがこれを解決する方法を知っているかどうかを知る必要があります.

このようなクラスがある場合:

TMyClass = public class
private
  ...
  method get_IndexedBool(index: Integer): boolean;
  method set_IndexedBool(index: Integer; value: boolean);
public
  property IndexedBool[index: Integer]: boolean
        read get_IndexedBool
        write set_IndexedBool; default; // make IndexedBool the default property
end;

このクラスを C# で次のように使用できます。

var myObj = new TMyClass();

myObj[0] = true;

ただし、TMyClass が次のように定義されている場合:

TMyClass = public class
private
  ...
  method get_IndexedBool(index: Integer): boolean;
  method set_IndexedBool(index: Integer; value: boolean);
public
  property IndexedBool[index: Integer]: boolean
        read get_IndexedBool
        write set_IndexedBool; // IndexedBool is not the default property anymore
end;

その後、IndexedBool プロパティは C# で非表示になります。私がそれを使用できる唯一の方法は、これを行うことです:

var myObj = new TMyClass();

myObj.set_IndexedBool(0, true);

何かが足りないのかわかりませんが、プロパティ宣言でデフォルトを削除すると、IndexedBool プロパティが表示されません。それに加えて、クラス インスタンスのプライベート メソッドに直接アクセスするのは間違っていると確信しています。

何か案は?

4

3 に答える 3

1

C# 4.0 ではインデックス付きプロパティがサポートされると思いますが、それ以前のものは残念ながらサポートされません。

残念ながら、あなたが求めているのは C# の制限であり、Delphi Prism ではありません。Delphi Prism vs C#の Delphi Prism Documentation wiki ページから:

C# は、既定のインデックス付きプロパティにのみアクセスできます。Delphi Prism では、名前を使用して他のインデックス付きプロパティを定義して使用できます。

このページでは、Delphi Prism コードに C# を介した独自の機能または拡張機能が含まれている他の領域についても概説します。これらの機能は、移植に役立つ可能性があります。

于 2010-03-19T08:32:39.503 に答える
0

美しくもきれいでもありませんが、迅速な回避策として、インデックス付きプロパティ アクセサーをパブリックにすることができます。そうすれば、C# からそれらを使用して値にアクセスできます。

于 2010-03-24T07:44:27.490 に答える
0

残念ながら、これが C# でインデックス プロパティにアクセスできる唯一の方法です。これは C# コンパイラの制限です (vb.net は問題なく動作するはずです)。

于 2010-03-19T07:12:28.260 に答える