Прикольная штука Вопрос как в C# сделать код который может реализовать вот это
program IndexerTest;
{$APPTYPE CONSOLE}
{%TogetherDiagram 'ModelSupport_IndexerTest\default.txaPackage'}
{%TogetherDiagram 'ModelSupport_IndexerTest\IndexerTest\default.txaPackage'}
{%TogetherDiagram 'ModelSupport_IndexerTest\default.txvpck'}
{%TogetherDiagram 'ModelSupport_IndexerTest\IndexerTest\default.txvpck'}
uses
SysUtils;
type
TTestIndexer = class
strict private
procedure SetProperty1(i:integer;val : Integer);
function GetProperty1(i:integer) : Integer;
procedure SetProperty2(i:integer;val : Integer);
function GetProperty2(i:integer) : Integer;
private
ar: array of integer;
public
constructor Create;
property Property1 [i :integer]: Integer read GetProperty1 write SetProperty1;
property Property2 [i :integer]: Integer read GetProperty2 write SetProperty2;
end;
var
///<directed>True</directed>
IndTestArr: array[0..2] of TTestIndexer;
i,j:integer;
constructor TTestIndexer.Create;
var
i:integer;
begin
inherited;
SetLength(ar,3);
for i := 0 to 2 do
ar[i] := i;
end;
function TTestIndexer.GetProperty1(i:integer): Integer;
begin
result := ar[i];
end;
procedure TTestIndexer.SetProperty1(i:integer;val : Integer);
begin
ar[i]:= val;
end;
function TTestIndexer.GetProperty2(i:integer): Integer;
begin
result := ar[i];
end;
procedure TTestIndexer.SetProperty2(i:integer;val : Integer);
begin
ar[i]:= val;
end;
begin
{ TODO -oUser -cConsole Main : Insert code here }
for I := 0 to 2 do
begin
IndTestArr[i] := TTestIndexer.Create;
IndTestArr[i].Property1[2] := 2;
end;
for I := 0 to 2 do
begin
for j := 0 to 2 - 1 do
with IndTestArr[i] do
Write(Property1[j],' ',Property2[j]);
Writeln;
end;
readln;
end.
Что тут интересно так это то что на C# влоб задачу не решить.
Нужно исхитриться
Такой код не пройдет
class testind
{
int [] ar;
public testind ()
{
ar = new int[3];
ar[0] = 1;
ar[1] = 2;
ar[2] = 3;
}
void setP1( int i, int val)
{
ar[i] = val;
}
int getP1( int i)
{
return ar[i];
}
public int this[int i]
{
get{ return ar[i];}
set{ ar[i] = value;}
}
public int this[int i]
{
get{ return this.getP1(i);}
set{ return this.setP1(i,value);}
}
}
А такой пройдет
class testind: IMyProp1,IMyProp2
{
int IMyProp1.this[int i]
{
get{ return ar[i];}
set{ ar[i] = value;}
}
int IMyProp2.this[int i]
{
get{ return ar[i];}
set{ ar[i] = value;}
}
public IMyProp1 MyProp1{ get {return this;}}
public IMyProp2 MyProp2{ get {return this;}}
int [] ar;
public testind ()
{
ar = new int[3];
ar[0] = 1;
ar[1] = 2;
ar[2] = 3;
}
}
Только использовать придется таким способом – через указатель на интерфейс
MpTd.MyProp1[1] = 10;
MpTd.MyProp1[3] = 10;
четверг, июня 01, 2006
Подписаться на:
Сообщения (Atom)