AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) C# 2 indexer im interface deklarieren. Wie?
Thema durchsuchen
Ansicht
Themen-Optionen

2 indexer im interface deklarieren. Wie?

Ein Thema von Heffalump · begonnen am 5. Mär 2006 · letzter Beitrag vom 6. Mär 2006
Antwort Antwort
Heffalump

Registriert seit: 3. Aug 2005
278 Beiträge
 
RAD-Studio 2009 Ent
 
#1

2 indexer im interface deklarieren. Wie?

  Alt 5. Mär 2006, 20:09
Hallo zusammen,

hat von Euch schon mal einer 2 indexer in einer Schnittstelle deklariert, wobei die Parameterliste "[int index]" ist. Bei mir will es nur funktionieren, wenn die Parameterliste unterschiedlich ist (einmal [int index] und einmal [string index]). Entweder ist der erste Fall nicht zulässig oder ich stelle mich zu intelligent an.

Wie kann eine solches interfaces aussehen?
  Mit Zitat antworten Zitat
Dax
(Gast)

n/a Beiträge
 
#2

Re: 2 indexer im interface deklarieren. Wie?

  Alt 5. Mär 2006, 20:14
Zwei Indexer mit selber Signatur? Geht per Definition nicht, weil der Compiler die Dinger dann nicht mehr unterscheiden kann.
  Mit Zitat antworten Zitat
Elvis

Registriert seit: 25. Nov 2005
Ort: München
1.909 Beiträge
 
Delphi 2010 Professional
 
#3

Re: 2 indexer im interface deklarieren. Wie?

  Alt 5. Mär 2006, 20:25
So probiert?
Code:
interface IMiep<T>
{
  T this[int index] {get;}
  T this[string index] {get;}
}
@Dax (string) ist eine andere Signatur as (int)
Robert Giesecke
I’m a great believer in “Occam’s Razor,” the principle which says:
“If you say something complicated, I’ll slit your throat.”
  Mit Zitat antworten Zitat
Dax
(Gast)

n/a Beiträge
 
#4

Re: 2 indexer im interface deklarieren. Wie?

  Alt 5. Mär 2006, 20:29
Heya Elvis

Zitat von Heffalump:
Bei mir will es nur funktionieren, wenn die Parameterliste unterschiedlich ist (einmal [int index] und einmal [string index])
Damit ist dein Beispiel gemeint, und es wird gleichzeitig ausgeschlossen

Ich glaub es ist eher sowas wie
Code:
interface IMiep
{
  int this[int index] {get;}
  string this[int index] {get;}
}
gemeint.

Das (string) und (int) unterschiedliche Signaturen sind weiß ich *g*
  Mit Zitat antworten Zitat
Heffalump

Registriert seit: 3. Aug 2005
278 Beiträge
 
RAD-Studio 2009 Ent
 
#5

Re: 2 indexer im interface deklarieren. Wie?

  Alt 6. Mär 2006, 11:22
So funktioniert es mit Delphi.NET (Winform)
Delphi-Quellcode:
  IMiep = interface
    function get_Index1(index: integer): string;
    function get_Index2(index: integer): string;

    property Index1[index: integer]: string read get_Index1;
    property Index2[index: integer]: string read get_Index2;
  end;
Wie kann man das Beispiel in C# darstellen?
  Mit Zitat antworten Zitat
Benutzerbild von JasonDX
JasonDX
(CodeLib-Manager)

Registriert seit: 5. Aug 2004
Ort: München
1.062 Beiträge
 
#6

Re: 2 indexer im interface deklarieren. Wie?

  Alt 6. Mär 2006, 11:39
Zitat von Heffalump:
Delphi-Quellcode:
  IMiep = interface
    function get_Index1(index: integer): string;
    function get_Index2(index: integer): string;

    property Index1[index: integer]: string read get_Index1;
    property Index2[index: integer]: string read get_Index2;
  end;
Wie kann man das Beispiel in C# darstellen?
Das wird schwer werden. In C# muss eine indizierte Property this heißen. und 2x this mit selber Signatur geht, wie oben schon gesagt, nicht.
Ich frag mich, warum das überhaupt in Delphi.NET geht

greetz
Mike
Mike
Passion is no replacement for reason
  Mit Zitat antworten Zitat
Dax
(Gast)

n/a Beiträge
 
#7

Re: 2 indexer im interface deklarieren. Wie?

  Alt 6. Mär 2006, 11:41
Ich schätze mal Delphi.NET setzt den Indexer-Zugriff einfach auf nen Call zur get_Index-Methode um, ohne wie C# das macht das DefaultMemberAttribute für die Methode zu setzen.
  Mit Zitat antworten Zitat
Elvis

Registriert seit: 25. Nov 2005
Ort: München
1.909 Beiträge
 
Delphi 2010 Professional
 
#8

Re: 2 indexer im interface deklarieren. Wie?

  Alt 6. Mär 2006, 11:59
Zitat von JasonDX:
Das wird schwer werden. In C# muss eine indizierte Property this heißen.
Eigentlich heißt sie Item. Und benannte Indexer zu benutzen ist so eine komische Eigenart aus D32, wenn jemand zu faul ist eine Containerklasse zu schreiben. (Es kommt ja nicht von ungefähr, dass D32 Code ziemlich inkompatibel zu for-in ist )
Zitat:
Ich frag mich, warum das überhaupt in Delphi.NET geht
Es geht schon, aber wie man in Heffalumps Schnipsel sehen kann braucht D.Net immer noch setter für properties in Interfaces, weil es keine virtuellen/abstrakten Properties kann.
In Chrome würde es zum Bleistift so aussehen:
Delphi-Quellcode:
IMiep<T> = interface
  property Item[index : Integer] : String read; default;
  property Item[name : String] : String read; default;
end;
Der generierte IL Code ist exakt der gleiche wie in C#. Wobei Item auch Mööp heißen könnte ohne, dass man es in C# erkennen würde.
Robert Giesecke
I’m a great believer in “Occam’s Razor,” the principle which says:
“If you say something complicated, I’ll slit your throat.”
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:07 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz