Discussion:
This in C#?
(zu alt für eine Antwort)
Ernst Sauer
2011-08-11 19:19:43 UTC
Permalink
Hello,

innerhal einer als static definierten Funktion würde ich
gerne auf alle Objekte einer Klasse zugreifen, z.B. in
folgender Form

public class CTest()
{
public double x;
public double y;
...
...
public static double sum(int i);
{
return this[i].x+this[i]+y; // ??? //
}
}
//=================================================
class Program
{
test[] = new CTest[100];
// mehrere Werte setzen
test[..].x= ...
test[..].y= ...

double sum=CTest.sum(5); // ???
}
//=================================================

Wie geht das?
danke
E.S.
Robert W. Kuhn
2011-08-11 19:52:50 UTC
Permalink
Post by Ernst Sauer
Wie geht das?
Garnicht.

Tschau - Robert
--
vertrau
voraus voraus
Ernst Sauer
2011-08-13 12:35:24 UTC
Permalink
Post by Robert W. Kuhn
Post by Ernst Sauer
Wie geht das?
Garnicht.
Hallo Robert,
hast Du eine Erklärung, warum so etwas nicht vorgesehen ist,
wäre doch naheliegend.

Gruß
E.S.
Robert W. Kuhn
2011-08-13 17:13:04 UTC
Permalink
Post by Ernst Sauer
Post by Robert W. Kuhn
Post by Ernst Sauer
Wie geht das?
Garnicht.
Hallo Robert,
hast Du eine Erklärung, warum so etwas nicht vorgesehen ist,
wäre doch naheliegend.
Ne, nicht naheliegend. Statische Funktionen einer Klasse haben ja den
"Vorteil", dass kein this-Zeiger benötigt ist. Und den Nachteil, dass
kein this-Zeiger da ist ;-)


Warum willst Du denn sum(...) statisch? Ich glaube, Du willst her das
hier:

public class CTest()
{
public double x;
public double y;
...
...
public double sum();
{
return this.x+this.y; // ??? //
}
}
//=================================================
class Program
{
test[] = new CTest[100];
// mehrere Werte setzen
test[..].x= ...
test[..].y= ...

double sum=test[5].sum(); // ???
}
//=================================================

Tschau - Robert
--
vertrau
voraus voraus
FrankDzaebel
2011-08-13 17:27:07 UTC
Permalink
Hallo Ernst,

das kann man folgendermaßen machen (ist aber nicht OOP-konform, dass
eine Klasse von seinen Instanzen weiß) :

using System.Collections.Generic;

namespace DemoKonsolenApplication
{
class Program
{
static void Main(string[] args)
{
int anzahlTestWerte = 100;
CTest[] tests = new CTest[anzahlTestWerte];
for (int i = 0; i < anzahlTestWerte; i++)
{
tests[i] = new CTest();
tests[i].X = i;
tests[i].Y = i + 1;
}
double sum = CTest.Sum(5); // ***
}
}

public class CTest
{
public static List<CTest> Instanzen = new List<CTest>();
public CTest() { Instanzen.Add(this); }
~CTest() { Instanzen.Remove(this); }

public double X;
public double Y;

public static double Sum(int i)
{
return Instanzen[i].X + Instanzen[i].Y;
}
}
}

ciao Frank

Lesen Sie weiter auf narkive:
Loading...