Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   C# Syntaxprobleme mit einer Methode (https://www.delphipraxis.net/80271-syntaxprobleme-mit-einer-methode.html)

St.Pauli 6. Nov 2006 15:33

Re: Syntaxprobleme mit einer Methode
 
Also das von Khabarakh funktioniert bei mir... Vieleicht liegts daran, wo du das ganze aufrufts? :gruebel:

Khabarakh 6. Nov 2006 15:47

Re: Syntaxprobleme mit einer Methode
 
Achso, jetzt ist die Erleuchtung gekommen ;) . Zwar lässt sich zum Initialisieren von Feldern Code wie "(static) double foo = Math.Sqrt(3);" direkt in den Klassenrumpf packen, alles andere muss aber schön in Methoden verpackt sein, so unübersichtlich ist C# nun auch wieder nicht :zwinker: . D.h., alle anderen Initialisierungen schiebst du in einen Konstruktor der Klasse (dort landen die Feldinitialisierungen letzten Endes ebenfalls), hier wohl am Ehesten der statische.
Code:
static Form1()
{
    Db4o.Configure().AddAlias(new TypeAlias("Demo_db4o.Person","Demo_db4o.Person, Demo_db4o"));
}

Jürgen Thomas 6. Nov 2006 15:54

Re: Syntaxprobleme mit einer Methode
 
Hallo Luckie,

ich habe mir die DLL mal mit Roeder's Reflector genauer angesehen. Dabei stelle ich fest:
Zitat:

public sealed class Config4Impl : Configuration, DeepClone, MessageSender, FreespaceConfiguration
public static Configuration Configure();
Wenn ich dies richtig lese, ist Configuration eine (feste) Instanz der Klasse Config4Impl und wird mit Configure() erzeugt. Also benötigst Du in der Tat:
Code:
... Db4o.Configure() ...
Zu dieser Klasse gibt es folgende Methode:
Code:
public void AddAlias(Alias alias);
Die Deklaration der Alias-Klasse und auch von TypeAlias habe ich (noch) nicht gefunden. Es spricht aber alles dafür, dass das richtige Verfahren so lautet:
Code:
Db4o.Configure().AddAlias(new Alias(...));
Vielleicht teilst Du das Verfahren auf, um im Debugger Details zu sehen:
Code:
Config4Impl cfg;
cfg = Db4o.Configure();
Alias xxx = new TypeAlias(...);
cfg.AddAlias(xxx);
Viel Erfolg! Jürgen

PS. Den Hinweis von Khabarakh verstehe ich nicht, oder ich würde es anders empfehlen. Eigene Initialisierungen - also auch die Config-Maßnahmen - können in den Konstruktor gelegt werden, aber nach InitializeComponents().

Khabarakh 6. Nov 2006 17:06

Re: Syntaxprobleme mit einer Methode
 
Zitat:

Zitat von Jürgen Thomas
Die Deklaration der Alias-Klasse und auch von TypeAlias habe ich (noch) nicht gefunden.

Der Reflector liefert dir eigentlich alles auf dem Präsentiertellerchen, weswegen ich meine Code auch in 10 Sekunden korrigieren konnte:
com.db4o.Db4o Erweitern -> Configure(), Klick auf Parameter -> com.db4o.config.Configuration, Erweitern -> AddAlias, Klick auf Parameter -> com.db4o.config.Alias, Erweitern -> Derived Types -> com.db4o.config.TypeAlias

Zitat:

PS. Den Hinweis von Khabarakh verstehe ich nicht, oder ich würde es anders empfehlen. Eigene Initialisierungen - also auch die Config-Maßnahmen - können in den Konstruktor gelegt werden, aber nach InitializeComponents().
Bisher war ich mir in diesem Thread nicht so sicher, aber bei diesem Thema hat mir mein "Objektorientierungssinn" (he, das muss ich mir merken ^^ ) eigentlich vollkommen zugestimmt.

Fassen wir einmal zusammen:
a) Wir rufen die Methode einer statischen Klasse auf.
b) Wir übergeben nur konstante Parameter.

c) Aus a) und b) folgt, dass die Instanz der Form für den Aufruf unwichtig ist.
d) Aus a) und b) können wir außerdem zusammen mit der etwaigen Kenntnis des Sinnes der Methode folgern, dass wir die Methode zu einer beliebigen Zeit in beliebigem Kontext aufrufen können.
e) Aus dem Sinn ergibt sich außerdem zusammen mit b), dass wir die Methode genau einmal im gesamten Verlauf der aktuellen AppDomain aufrufen sollten.
f) Und da der Aufruf wohl nicht zum Spaß allein existiert, sollten wir ihn vor der Methode von Form1 durchführen, die den Alias benötigt. Wie aber in d) gesagt ist die genaue Zeit, wann nun "davor" ist, irrelevant.

Daraus, besonders e), folgt für mich, dass das Ganze nur in einem statischen Konstruktor oder einem Singleton stattfinden kann. Und laut f) sollte es uns auch nicht stören, wenn dieser schon ein paar Schritte vor dem Instanzen-Konstruktor aufgerufen, was bei einem Singleton mit lazy Initialization nicht der Fall wäre.

Luckie 7. Nov 2006 09:07

Re: Syntaxprobleme mit einer Methode
 
Zitat:

Zitat von St.Pauli
Also das von Khabarakh funktioniert bei mir... Vieleicht liegts daran, wo du das ganze aufrufts? :gruebel:

:wall: http://www.michael-puff.de/files/mecker.gif

Das war's.


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:17 Uhr.
Seite 2 von 2     12   

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