2010-03-18 4 views
3

C# 웹 응용 프로그램에서 많이 사용하는 색인 ​​된 속성을 가진 Delphi Prism 클래스가 여러 개 있습니다 (큰 Delphi Win32 시스템을 ASP.Net). 내 문제는 그들이 C# 그들의 색인의 기본 속성이 아닌 경우 색인 된 속성을 볼 수 없다는 것입니다. 어쩌면 내가 뭔가 잘못하고있는 걸지도 모르지만 나는 완전히 잃어 버렸어.속성이 기본값이 아닐 때 C#에서 Delphi Prism 인덱스 속성을 볼 수있게 만드는 방법

이 질문은 버그 보고서와 비슷하지만 버그를보고하기 전에 다른 사람이 해결 방법을 알고 있는지 알아야합니다.

나는 경우 같은 클래스 :

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; 
: 타입을 TMyClass는 다음과 같이 정의 된 경우,

var myObj = new TMyClass(); 

myObj[0] = true; 

그러나 :이 같은 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; 

그런 다음 IndexedBool 속성이 C#에서 보이지 않게됩니다. 내가 뭔가를 누락하는 경우

var myObj = new TMyClass(); 

myObj.set_IndexedBool(0, true); 

는 나도 몰라,하지만 난 속성 선언에 기본을 제거하면 나는 IndexedBool 속성을 볼 수 없습니다 : 나는 그것을 사용할 수있는 유일한 방법은이 일을한다 . 게다가, 나는 클래스 인스턴스의 private 메소드에 직접 액세스하는 것이 잘못되었다고 확신한다.

아이디어가 있으십니까?

답변

1

나는 C# 4.0 will support 색인 된 속성이지만 그 전에는 슬프게도 그렇지 않을 것이라고 생각합니다.

불행히도 C#과 Delphi Prism의 한계가 있습니다. Delphi Prism Documentation 위키 페이지에서 Delphi Prism vs C# :

C#은 기본 색인 된 속성에만 액세스 할 수 있습니다. Delphi Prism에서는 이름을 사용하여 다른 인덱싱 된 속성을 정의하고 사용할 수 있습니다.

이 페이지는 Delphi Prism 코드가 포트에서 유용 할 수있는 C# 이상의 고유하거나 확장 된 기능을 포함하는 다른 영역에 대해서도 설명합니다.

+0

예, 저는 이것을 사용하여 응용 프로그램에서 사용되는 일부 C# 클래스에서 색인화 된 속성을 구현하지만, 문제는 내 Delphi Prism 클래스와 관련이 있습니다. 델파이 프리즘 (Delphi Prism) 제한이라고 생각했지만 VB에서 작동하므로 C#이 비난의 대상이라고 생각합니다. – Arcturus

+0

예, Delphi Prism 제한이 아닌 C# 제한입니다. Prism 지원보다는 C# 지원을 해킹해야합니다. – jamiei

+0

반영 할 답변을 업데이트했습니다. – jamiei

0

불행하지만 C#을 사용하면 색인 속성에 액세스 할 수있는 유일한 방법입니다. 그것은 C# 컴파일러 제한 (vb.net 잘해야한다).

0

아름답거나 깨끗하지는 않지만 빠른 해결 방법으로 인덱싱 된 속성 접근자는 공개 할 수 있습니다. 그런 식으로 C#에서 값을 액세스 할 수 있습니다.