Eigener Datentyp ?

Railer

Mitglied
Hi!

Ich möchte meinen eigenen Datetyp erstellen, aber es klappt nicht so recht.

Mein Datentyp soll so aussehen:

TConFeldType:
FeldInteger
FeldString
FeldDate
FeldDecimal

Das Ziel ist es im Endeffekt eine Funktion aufzurufen, die als Parameter meinen Datentyp erwartet. Zur besseren Vorstellung:

deklaration:
MakeValidWhereString(string Datenbankfeld, string WertDesFeldes, TConFeldType FeldType)

Aufruf:
myVar = MakeValidWhereString("datenbankfeld", "wert des feldes", FeldString)


Ich habe also eine DLL erstellt, in der ich eine Klasse habe. In dieser Klasse habe ich
als Datentyp ein ENUM erstellt

enum TConFeldType
(
FeldInteger
FeldString
FeldDate
FeldDecimal
)

und die Funktion

MakeValidWhereString(string Datenbankfeld, string WertDesFeldes, TConFeldType FeldType)

In meiner Applikation erstelle ich ein Objekt von der DLL-Klasse und kann die Funktion normal benutzen. Jetzt kommt das Problem:

wenn ich die Funktion "MakeValidWhereString" aufrufe muss ich an der Stelle meines Datentypes die kommplete Herkunft meines Datentypes schreiben, so sieht das aus:

myVar = MakeValidWhereString("datenbankfeld", "wert des feldes", MeineKlasse.TConFeldType.FeldString)

und es nervt natürlich, ich hätte das gerne so:

myVar = MakeValidWhereString("datenbankfeld", "wert des feldes", FeldString)

Frage: Geht das? Bei anderen Datentypen muss ich ja auch nicht immer schreiben wozu sie gehören.

Vielen Dank!
 
Zuletzt bearbeitet:
Leider lässt sich die Sache nicht wirklich abkürzen. Wenn du andere Typen abkürzt, so kannst du den namespace oft weglassen, wenn du ihn am Anfang schon eingebunden hast. Die enum-Bezeichnung fungiert aber wie ein Klassenbezug und diesen kannst du nie weglassen.
Ich würde das ganze einfach nicht in eine DLL packen. Somit wird der Name schon mal kürzer. Ansonsten ist ein enum genau das, was du in dem Beispiel brauchst, denn du willst ja eine Konstante weiterreichen und keine Referenz auf eine Datenstruktur oder beim Strukt als Werttyp gleich eine komplette Kopie des Strukts.
 
Hi!

Danke für die Antworten.

Ich würde auch sagen, dass ich kein Strukt brauche, denn letztendlich soll ich ja der Funktion nur sagen von welchem Typ das Feld ist, also Integer, String, Date oder Decimal in Form einer Konstante und genau das erreiche ich durch enum.

Und zu der Abkürzung:
In VB.NET gibt es eine Funktion "DateAndTime.DateAdd( - parameter - )" erwartet als ersten Parameter ein Datentyp namens "Microsoft.VisualBasic.DateInterval.Day", anscheinend auch ein Enum. Beim Aufruf muss man aber nur das "DateInterval.Day" als Parameter schreiben:

DateAndTime.DateAdd( DateInterval.Day, bla, bla )"

kann ich selbst nicht auch sowas anstellen?

Denn ich muss eigentlich einen ganzen Haufen Bibliotheken von Delphi nach VB.NET bzw. C#.NET umschreiebn und bei komplizierten Verschachtelungen kann das schon sehr sehr merkwürdig aussehen, wenn man als Parameter erstmal eine ganze Zeile "Herkunft" schreiben muss: Funktion(param1, param2, Irgendwas.Irgendwas.Irgendwas.Irgendwas.Sonstwas.MeinTyp)
 
Microsoft.VisualBasic ist der namespace
DateInterval wahrscheinlich das enum und Day der Wert oder
DateInterval das Strukt und Day die Eigenschaft oder
DateInterval die Klasse und Day die Eigenschaft.

Egal wie man es nimmt, man kann immer nur den namespace weglassen. Wenn jemand anders ne trickreichere Lösung hat, wäre ich auch dankbar drum. *g
 
Ähh.. dann drücke dich mal ordentlich aus. Was genau du willst hab ich noch immer nicht verstanden, weil mir deine Beiträge zum Teil auch n bissl widersprüchlich vorkommen.

...Ich möchte meinen eigenen Datetyp erstellen...
Dann brauchst du ein Struct, oder wenns mehr können soll eine Klasse.
Ein Enum ist nur eine Gruppe von benannten Konstanten die zusammengehören.

Das Ziel ist es im Endeffekt eine Funktion aufzurufen, die als Parameter meinen Datentyp erwartet. Zur besseren Vorstellung:
Ja, gut. Wo ist das Problem bei nem Struct/ner Klasse?

Code:
public struct Blubb
{
    public int Bla;
}
...
public void NeMethode(Blubb b)
{
    // mach was mit dem Blubb in b ..
}
...
Blubb myBlubb = new Blubb();
myBlubb.Bla = 5;
NeMethode(b);

Jetzt haben wir den eigenen neuen Datentyp als Parameter in ner Methode und können diese aufrufen.

wenn ich die Funktion "MakeValidWhereString" aufrufe muss ich an der Stelle meines Datentypes die kommplete Herkunft meines Datentypes schreiben, so sieht das aus:
Das was du gemacht hast ist keinen Datentyp erstellen, sondern eben ein Enum. Bei diesen ist es nötig den Enum-Namen gefolgt vom Enumerations-Wert zu verwenden (bei Aufrufen).

Denn ich muss eigentlich einen ganzen Haufen Bibliotheken von Delphi nach VB.NET bzw. C#.NET umschreiebn und bei komplizierten Verschachtelungen kann das schon sehr sehr merkwürdig aussehen, wenn man als Parameter erstmal eine ganze Zeile "Herkunft" schreiben muss: Funktion(param1, param2, Irgendwas.Irgendwas.Irgendwas.Irgendwas.Sonstwas.MeinTyp)
Wenn die verwendeten Elemente schön in Namespaces gegliedert sind, kannst du einen Namespace mit dem using-Attribut einbinden und dann die Klasse (oder was auch immer) direkt ansprechen.
So machst du es ja auch mit dem System Namespace.
Code:
using System; // Einbinden des System-Namespaces;
...
Console.WriteLine("Hello World");
// ohne dem using müsstest du System.Console.WriteLine(..); schreiben

Vielleicht solltest du dir nochmal irgendwo ansehen wie .net aufgebaut ist. ;)

MfG,
Alex
 
Nun ja, das ist ja das Problem. Ich Programmiere delphi seit ewig und .NET ist schon ewtas anders, ich muss eben erst lernen.

Das Problem hat sich inzwischen erledigt. Ich habe nur den Fehler gemacht meine Datentypen innerhalb der Klassen zu deklarieren und nicht in den Namespaces. Jetzt geht's natürlich. Wenn ich alle NS aufliste, kann ich meinen Datentyp direkt ansprechen.

Und das Übergeben eines Datentypes als Parameter an eine Funktion war nie das Problem, ich wollte nur zeigen, was ich vorhabe, damit man mich besser versteht.

Danke für die Hilfe!
 
Zurück