Laden...

Quellcode separieren

Erstellt von little_budda vor 17 Jahren Letzter Beitrag vor 17 Jahren 3.296 Views
little_budda Themenstarter:in
48 Beiträge seit 2007
vor 17 Jahren
Quellcode separieren

Hallo,

ich steige gerade von Delphi nach C# um.
In Delphi konnte ich Code in "Units" auslagern
um mein eigentliches Formular nicht zu überlasten.

Kann ich das in C# auch und falls ja
hat jemand ein Beispiel für mich?

Gruß Holger.

🤔

gefahren werden ist nur solange schön wie man nicht selbst lenken möchte ...

N
750 Beiträge seit 2004
vor 17 Jahren

ich kenne delphi leider nicht.
kann dir somit auch nicht sagen womit Units zu vergleichen wären. (vielleicht klasse oder namespace?? sind nur vermutungen!)

http://www.galileocomputing.de/openbook/visual_csharp/ könnte dir vielleicht weiterhelfen

nils

?( wer suchet, der findet auch! :]

2.891 Beiträge seit 2004
vor 17 Jahren

Öhm, ja... 🤔 Denke ich jedenfalls (in Bezug auf deine Frage). Das Konzept mit Namespaces und Klassen kennst du ja sicherlich, also denke ich mal, der Hinweis auf partielle Klassen hilft dir da weiter.

_ :rtfm:partielle Klassendefinitionen_
Es ist möglich, die Definition einer Klasse, einer Struktur oder einer Schnittstelle auf zwei oder mehr Quelldateien aufzuteilen. Jede Quelldatei enthält einen Abschnitt der Klassendefinition, und alle Teile werden bei der Kompilierung der Anwendung miteinander kombiniert. Es gibt mehrere Situationen, in denen das Teilen einer Klassendefinition von Vorteil sein kann:
Beim Arbeiten an großen Projekten ermöglicht das Aufteilen einer Klasse auf verschiedene Dateien mehreren Programmierern, gleichzeitig daran zu arbeiten.
Beim Arbeiten mit einer automatisch generierten Quelle kann der Klasse Code hinzugefügt werden, ohne die Quelldatei neu erstellen zu müssen. Visual Studio verwendet diesen Ansatz beim Erstellen von Windows Forms, Webdienst-Wrappercode usw. Sie können Code erstellen, in dem diese Klassen verwendet werden, ohne die von Visual Studio erstellte Datei bearbeiten zu müssen.
Eine Klassendefinition teilen Sie mithilfe des partial-Schlüsselwortmodifizierers auf, wie nachstehend gezeigt:

public partial class Employee  
{  
    public void DoWork()  
    {  
    }  
}  
  
public partial class Employee  
{  
    public void GoToLunch()  
    {  
    }  
}  

[...]

Ansonsten einfach ein paar .NET Projekte angucken und gucken, wie es da gemacht wird (interessant weil umfangreich ist z.B. der Quellcode von Paint.NET).

Gruß
dN!3L

D
386 Beiträge seit 2007
vor 17 Jahren

Aehm.. Meine Delphi-Erfahrung hilft mir jetzt nicht den Unterschied zwischen Unit und Datei (.pas) zu sehen.. Und du kannst auch mehrere .cs Dateien erstellen, ja..
Der Rest (Was fuer Hierarchien gibt es, wie teilt man Code auf und wie kann man Design/Funktion trennen) wurde weiter oben ja schon schoen praesentiert.

Pound for pound, plutonium is about as toxic as caffeine when eaten.

5.657 Beiträge seit 2006
vor 17 Jahren

Units sind meiner Meinung nach am ehesten mit Assemblies vergleichbar...

Viele Grüße,
Christian

Weeks of programming can save you hours of planning

D
386 Beiträge seit 2007
vor 17 Jahren

Original von MrSparkle
Units sind meiner Meinung nach am ehesten mit Assemblies vergleichbar...

Da bin ich neugierig: Warum das? Oder meinst du dcu Dateien (also kompilierte Units, "Delphi Compiled Units")? Vielleicht muesste man erst verstehen was der OP meinte. Units sind fuer mich erstmal nichts weiter als sowas:


unit Foo;

interface ..

implementation ..

//... Code

Pound for pound, plutonium is about as toxic as caffeine when eaten.

2.891 Beiträge seit 2004
vor 17 Jahren

Wo ich's mir nochmal genauer angeguckt habe: http://www.dsdt.info/grundlagen/sprache/units.php?search=unit
Kommt den Projektmappen und Projekten (~Unit) im VS nah. Hat aber auch was von klassen, wegen privaten und öffentlichen Zugriffsmodifizierern.

Gruß
dN!3L

B
1.529 Beiträge seit 2006
vor 17 Jahren

Das Unit-Konzept von Delphi kommt aus dem Pascal-Erbe und damit der strukturierten Programmierung.
Dort stellten Units mit den Interface- und Implementation-Blöcken die einzige Möglichkeit der Steuerung der Sichtbarkeit dar (vergleichbar mit der C-Unterteilung in Code- und Headerdateien)

Hier geht es dir wie dem C++ Programmierer, der sich auch mit Header-Dateien herumschlagen muss...

In einer OO-Programmiersprache ist dieses Konzept eigentlich überflüssig (Sichtbarkeit auf Klassen und Member-Ebene, nicht auf Codeblock-Ebene).
Daher gibt es in einer OO-Sprache auch so etwas nicht (außer halt als Erblast).

J
3.331 Beiträge seit 2006
vor 17 Jahren

Also ich verstehe wirklich nicht, zu welchen Aussagen Leute kommen, die nicht mit Delphi gearbeitet haben. Wirklich vergleichbar sind "Einheiten" von C# und Delphi natürlich nicht, weil C# konsequent OOP ist und Delphi nur teilweise.

Nach meiner Überzeugung (Delphi seit knapp 10 Jahren) gilt eigentlich nur soviel: Eine Unit ist eine pas-Datei, also ist sie am ehesten mit einer cs-Datei zu vergleichen. In der Regel enthält eine Unit eine Klasse, genauso wie eine cs-Datei. Aber in beiden Fällen ist das nur "Vereinbarung", aber keine Verpflichtung.

Eine dcu-Datei ist das Kompilat einer einzelnen pas-Datei; in Delphi.NET wird daraus eine dcuil-Datei, damit IL DASM damit arbeiten kann. Der Linker erzeugt EXE oder DLL - je nach Festlegung.

Projektmappe entspricht übrigens einer Projektgruppe und ein Projekt einem Projekt (welche Überraschung).

Ich hoffe, dass ich jetzt nicht den Unmut von Fachleuten hervorgerufen habe, weil ich zu sehr vereinfacht habe, und für andere nicht zu kompliziert wurde. Bitte verzeiht mir: ich bin ein Anwendungsentwickler und keiner, der jedes Bit umbiegt. Jürgen

J
163 Beiträge seit 2007
vor 17 Jahren

Units in Delphi sind vergleichber mit Modulen(.mdl) in VB/VB.NET. In C# gibts sowas nicht, allerdings kannst du dir einfach eine statische Klasse erstellen, wo du deine Methoden und Variablen auslagern kannst.

little_budda Themenstarter:in
48 Beiträge seit 2007
vor 17 Jahren

Hallo,

ich habe jetzt eine Klasse erstellt, wie es hier empfohlen wurde.


using System;
using System.Collections.Generic;
using System.Text;

namespace WebTools_2
{
    public partial class WebTools
    {
        public bool Webseite_erzeugen()
        {

              [...]

        }
    }
}

Wird auch fehlerfrei übersetzt.
Wie greife ich von der Form aus denn jetzt auf meine Funktion zu?
Wenn ich dort


WebTools_2.WebTools.

eingebe bietet mir die Codevervollständigung nur "Equals" und "ReferenceEquals" aber nicht meine Funktion an.
Ich habe im Kopf auch schon mal "using WebTools_2" angegeben aber hilft auch nicht.

Was mache ich denn bitte falsch?

Gruß Holger.

🤔

gefahren werden ist nur solange schön wie man nicht selbst lenken möchte ...

L
770 Beiträge seit 2006
vor 17 Jahren

hy,

Webseite_erzeugen() ist keine statische Klassenmehtode, d.h. sie ist objektgebunden (ich nenn es einfach so).

d.h. für die methode brauchst du:


WebTools myWebTools = new WebTools(); //Eventuell Konstruktor in der Klasse
myWebTools.Webseite_erzeugen();

oder du benutzt das schlüsselwort static:

        public static bool Webseite_erzeugen()
        {

              [...]

        }

dann kannst du mit WebTools_2.WebTools.Webseite_erzeugen() aufrufen.

(fehler sind natürlich möglich, freue mich dann auf ausbesserung=

lg

lg Lion

little_budda Themenstarter:in
48 Beiträge seit 2007
vor 17 Jahren

Danke.
Klappt einwandfrei.

gefahren werden ist nur solange schön wie man nicht selbst lenken möchte ...

G
84 Beiträge seit 2007
vor 17 Jahren

Wie Borg schon sagte, kommen Units aus der strukturierten Programmierung.

Der großte Unterschied ist demnach, dass eine Unit einfach eine Funktionssammlung sein kann ohne jede Klasse.

@litte_buddha: Ich vermute deswegen hast Du auch versucht die Funktion der Klasse aufzurufen ohne eine Instanz zu erstellen. Von daher ist aus Deiner Sicht eine Unit (Delphi) mit einer statischen Klasse (C#) zu vergleichen.
Allerdings würde ich Dir nicht empfehlen, jetzt nur statische Klassen zu benutzen, weil Du es so kennst, sondern Dich mit dem OO Paradigma vertraut zu machen und nicht C# als "Delphi-Derivat" einzusetzen 😉