Autor Beitrag
Sachsenpaule
Hält's aus hier
Beiträge: 11


Visual Studio 2015 C#, MsSQL 2014
BeitragVerfasst: Di 10.05.16 15:15 
Hallo,
ich muss mal eine für euch warscheinlich banale Frage stellen.
Ich arbeite seit kurzem mit C#. Früher immer C und C++
Jetzt habe ich das Problem das ich meinen Code gerne aufteilen möchte.
So als wenn ich eine Klasse schreibe.
Früher gab es dafür eine Headerdatei. Da konnte man Funktionen, Variablen usw. drin ablegen
und von überall drauf zugreifen. Wie ich eine Datei anlege ist mir klar. Aber
ich kann nicht auf diese Datei zugreifen.
Muss ich das über ein using Statement oder namespace machen.
Vielleicht ein kurzer Tip von euch wie man sowas macht.


Moderiert von user profile iconChristian S.: Topic aus WinForms verschoben am Di 10.05.2016 um 15:20
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: Di 10.05.16 18:22 
Wenn Du den Inhalt einer Klasse über mehrere Dateien verteilen möchtest, kannst Du das mittels Partical Classes machen. Benutzt wird die Klasse dann genauso, als stände alles in einer Datei.

Der Windows-Forms-Designer macht es ja zum Beispiel genauso, da ist Dein Code für eine Form ja z.B. in der "Form1.cs", während der Code des Designers in "Form1.Designer.cs" ist, obwohl es beides dieselbe Klasse "Form1" ist.

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
jfheins
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 918
Erhaltene Danke: 158

Win 10
VS 2013, VS2015
BeitragVerfasst: Di 10.05.16 18:44 
Wenn du "einfach so" eine neue Datei anlegst, dann ist diese auch noch nicht im Visual Studio Projekt drin. Das geht automatisch, wenn du im VS im Projektmappenexplorer etwas hinzufügst.

eine using-Direktive benötigst du eigentlich nur, wenn die einzubindenden Klassen in einem anderen Namespace sind.

Zitat:
So als wenn ich eine Klasse schreibe.

Du kannst in C# eigentlich nur Code in Klassen schreiben.

Insgesamt ist deine Frage leider etwas unnvollständig, da ich nicht genau weiß, was du machen willst und was dein Ausgangspunkt ist. Falls dir die Antworten bis jetzt nicht helfen, könntest du vielleicht mit ein paar Screenshots oder Code illustrieren, was dein Problem ist?
Sachsenpaule Threadstarter
Hält's aus hier
Beiträge: 11


Visual Studio 2015 C#, MsSQL 2014
BeitragVerfasst: Di 10.05.16 18:57 
Es gibt keinen speziellen Code. Ich erstelle ein neues Programm.
Jetzt wird das Programm unübersichtlich weil es immer größer wird.
Ich möchte dann Teile die ich mehrfach verwende einfach in eine
andere Datei verschieben. So wie früher die .h Dateien.
Ich sage dann im VS hinzufügen c# Datei. Ich habe dann ein leeres Blatt.
Hier will ich Daten/ Methoden usw. hinschieben.
Wenn ich das gemacht habe weiß ich nicht wie ich auf die Daten zugreifen kann.
Wenn ich Beispielsweise eine Liste von Variablen deklariere,
oder eine Funktion schreibe die ich immer wieder aufrufen will.
Hoffe das es jetzt was verständlicher ist.
(Ich meine keine Klassen)!!!!!!
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: Di 10.05.16 19:13 
Also so wirklich klar ist mir das nicht. Generell ist in C# alles in der Struktur aus Klassen und Interfaces untergebracht, es gibt keine allein stehenden Elemente. Wenn Du mal ein Beispiel gibst, wird uns vielleicht klarer, was Du erreichen möchtest.

P.S.: Bitte nutze beim Schreiben von Beiträgen die Eingabetaste nur für neue Absätze. Den Zeilenumbruch am Ende einer Zeile macht der Browser schon selber ;)

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
Sachsenpaule Threadstarter
Hält's aus hier
Beiträge: 11


Visual Studio 2015 C#, MsSQL 2014
BeitragVerfasst: Di 10.05.16 20:26 
Ich will meinen Code einfach auf mehrere .cs Dateien aufteilen. Wenn ich das mache findet der Compiler den Code nicht mehr.Was muss ich machen damit er den Code findet. Wenn ich mich jetzt immer noch nicht klar genug ausgedrückt habe gebe ich auf. Weiß nicht wie ich das noch erklären soll.
Was nützt es wenn ich eine Code hier rein stelle den ich auf 2 Dateien aufteilen will. Da kann man jeden Code nehmen.
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: Di 10.05.16 20:44 
Also, Code in C# steht immer in Klassen. Und wie man Klassen aufteilt, habe ich oben geschrieben: Partial Classes. Alternativ halt eine neue Klasse, wenn man da sinnvoll Funktionalität zusammenfassen kann.

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
Sachsenpaule Threadstarter
Hält's aus hier
Beiträge: 11


Visual Studio 2015 C#, MsSQL 2014
BeitragVerfasst: Di 10.05.16 20:50 
Ok, jetzt hab ich es fast verstanden. Den Begriff "Partical Classes" habe ich noch nicht benutzt. Wäre nett wenn Du mir sagst wie und wo ich den Verwende. Bin leider Neuling, also bisschen dumm
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: Di 10.05.16 20:56 
Ich hab's doch verlinkt ;-)

Sagen wir Du hast diese Klasse:

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
class JekyllHyde {
  private int karma = 0;

  public void DoGood() {
    karma++;
  }

  public void DoEvil() {
    karma--;
  }
}


und Du willst jetzt das auf drei Dateien aufteilen, dann kannst Du das so machen:

Datei 1:
ausblenden C#-Quelltext
1:
2:
3:
partial class JekyllHyde {
  private int karma = 0;
}


Datei 2:
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
partial class JekyllHyde {
  public void DoGood() {
    karma++;
  }
}


Datei 3:
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
partial class JekyllHyde {
  public void DoEvil() {
    karma--;
  }
}

Alle Dateien müssen in dem Sinne "komplett" sein, als das auch der Namespace drum herum sein muss und natürlich die using-Direktiven, die in der entsprechenden Datei Anwendung finden. Am Einfachsten machst Du es Dir, wenn Du Dir von Visual Studio einfach dreimal das Grundgerüst einer Klasse samt Namespace etc. erstellen lässt und dann ein "partial" davor schreibst.

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".

Für diesen Beitrag haben gedankt: hydemarie
Ralf Jansen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4700
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: Di 10.05.16 21:09 
Ich vermute du willst gar keine partiellen Klassen ;) Es ist glaube ich besser die Technik für später erstmal zur Seite zu legen.
Sondern du denkst an etwas das überall einfach so ~global~ verfügbar ist? Richtig?

Das ist eigentlich ganz schlechter OO Stil. Den richtigen Scope für etwas zu setzen ist elementar für gutes beherrschbares Design. Mittlelfristig solltest du das Konzept von ~global~ verfügbaren Dingen aus dem Kopf entsorgen ... nachdem man ein wenig mehr Erfahrung hat. Wenn du sowas im Moment brauchst dann packe das in eine dafür vor gesehen explizite Klasse mit passender Sichtbarkeit (z.B. public)
und mache die Dinge die du woanders aus dieser Klasse brauchst static, heißt du brauchst keine Instanz dieser Klasse sondern kannst einfach von irgendwo Klassennamen.Membername aufrufen um an den Member zu kommen. Später wenn das verstanden ist kann man dann von da aus weitere Konzepte kennenlernen (über Singelton Klassen zu Dependency Injection) die ~globales~ unnötig machen.

Was statische Klassen/Member sind kannst du hier mit Beispielen nachlesen
Sachsenpaule Threadstarter
Hält's aus hier
Beiträge: 11


Visual Studio 2015 C#, MsSQL 2014
BeitragVerfasst: Di 10.05.16 21:17 
Danke für die tolle Hilfe. Jetzt hab ich es verstanden. Ich hab halt 20 Jahre in C und C++ programmiert. Ich muß mich erst daran gewöhnen umzudenken.
Ich weiß das ich mir immer noch einen Ring durch die Nase ziehe. Daher versuche ich das zu verbessern. Bin froh das es so Leute wie euch gibt die auch mal etwas Geduld mit einem haben
doublecross
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 149
Erhaltene Danke: 27

Windows 7
C#; Visual Studio 2015
BeitragVerfasst: Mi 11.05.16 14:12 
Hi,
user profile iconSachsenpaule hat folgendes geschrieben Zum zitierten Posting springen:
Danke für die tolle Hilfe. Jetzt hab ich es verstanden. Ich hab halt 20 Jahre in C und C++ programmiert. Ich muß mich erst daran gewöhnen umzudenken.


du solltest trotz der Namensähnlichkeit nicht auf die Idee kommen, dass c# eine sonderlich mit C/C++ verwandte Sprache ist. Zwar sind einige Konstrukte sehr ähnlich (switch case Anweisungen for-Schleifen usw.) aber solche Konstrukte findest du auch in unzähligen anderen Sprachen, wie z.B. PHP wieder. Die Unterschiede liegen oft im Detail und fallen erst spät auf (z. B. keine Mehrfachvererbung in C#).

Daher solltest du dich bemühen C# wie eine neue Sprache zu lernen. Nimm dir also am besten mal die Zeit absolute Anfänger Tutorials oder die ersten Kapitel in C# Büchern zu lesen. Denn dann entdeckst du plötzlich die Unterschiede trotz der Ähnlichkeiten. Du wirst dichter an die Art wie man in C# denken sollte um nicht "gegen das System" zu arbeiten herangeführt, und alles was vermeintlich deckungsgleich zu C/C++ kannst du ja schnell quer lesen.

Ich glaube mit einer solchen Herangehensweise bekommt man leichter ein Gefühl für die Sprache, davon abgesehen, dass man sicher von Zeit zu Zeit über neue interessante Techniken stolpert, die C/C++ so nicht bietet.

Also noch einmal C# ins keine C Erweiterung.

Ich wünsche dir dennoch viel Spaß damit :).


Zuletzt bearbeitet von doublecross am Mi 11.05.16 14:19, insgesamt 1-mal bearbeitet
Sachsenpaule Threadstarter
Hält's aus hier
Beiträge: 11


Visual Studio 2015 C#, MsSQL 2014
BeitragVerfasst: Mi 11.05.16 18:50 
Du hast vollkommen Recht. Das hab ich auch so gemacht. Nur leider kann ich in C# noch nicht denken. Ich habe schon einige Projekte gestemmt mit C#. Nur manchmal komme ich an meine Grenzen und fange an zu suchen. Da ist es natürlich schön wenn es so Leute wie euch gibt wo mal man nachfragen kann. Ich kann leider nicht alles in C# machen da muss ich auf C oder C++ zurückgreifen.Daher komme ich manchmal noch etwas durcheinander. Nochmal danke für die Hilfe und die tollen Tips
hydemarie
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 475
Erhaltene Danke: 51



BeitragVerfasst: Mi 11.05.16 19:35 
Warum bist du denn umgestiegen?
Sachsenpaule Threadstarter
Hält's aus hier
Beiträge: 11


Visual Studio 2015 C#, MsSQL 2014
BeitragVerfasst: Mi 11.05.16 19:58 
Ich hab irgendwann gesehen das man mit MSSQL besser mit C# umgehen kann. Ich musste eine Anwendung die früher auf C++ und Paradox lief auf SQL Server umschreiben. In C++ habe ich relativ wenig darüber gefunden. C# Beschreibungen über das Thema gab es jede Menge. Ich hab mich dann mal eingelesen und war eigentlich begeistert. Ich habe es aber auch nicht bereut C# an erste Stelle zu nehmen. Manchmal, besonders bei Mikrocontroller kommt man um C oder C++ nicht drumrum, besonders wenn man an die Hardware ran will oder muss. Aber ich muss da auch gestehen das ich soweit in C# noch nicht gekommen bin. Vielleicht geht das ja auch damit. Mal sehen was die Zukunft da bringt.
hydemarie
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 475
Erhaltene Danke: 51



BeitragVerfasst: Mi 11.05.16 20:23 
Das sollte auch kein "entweder - oder" sein. C++ finde ich persönlich an vielen Stellen nur eleganter. (C# ist mir auch zu inkonsistent für langfristige Projekte, die werfen ja alle zwei Jahre den halben Standard weg bei Microsoft...)
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: Mi 11.05.16 20:29 
Hallo,

setzt die Unterhaltung bitte als private Nachrichten fort, die hat mit dem Thema nichts zu tun und ist nicht wirklich von allgemeinem Interesse. ;)

Viele Grüße
Christian

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
hydemarie
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 475
Erhaltene Danke: 51



BeitragVerfasst: Mi 11.05.16 20:35 
Vielleicht würde die Allgemeinheit ja auch gern mehr über C++ erfahren? :D




Schon gut, ich beuge mich, Scheff. Nicht wieder hauen!
jfheins
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 918
Erhaltene Danke: 158

Win 10
VS 2013, VS2015
BeitragVerfasst: Mi 11.05.16 20:41 
Auch wenn die eigentliche Frage wohl beantwortet ist, würde ich gerne noch ein paar Ausführungen anbringen :angel:

Ich mache das meistens so, dass jede Klasse ihre eigene Datei bekommt. Benannt nach der Klasse. Für Projekte mit vielen Klassen mache ich dann Namespaces und sortiere alles aus einem Namespace dann in einen Ordner. Das sieht dann so aus:
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
using System;
using System.ComponentModel;
using System.Runtime.CompilerServices;

namespace Common.util
{
  public abstract class MyBase : INotifyPropertyChanged
  {
    // Felder

    // Methoden
  }
}


Von anderswo im Projekt muss man dann eben per using Common.util; diesen Namespace einbinden und kann die Klasse benutzen.
Wenn eine Klasse zu groß wird, kann man sie wahrscheinlich halbwegs sinnvoll auf mehrere, kleinere Klassen aufteilen. Die dürfen dann ruhig im gleichen Namespace sitzen.

Antwort in kurz: Codeaufteilung, indem man den Code auf Klassen aufteilt. Den Ordner übersichtlich halten, indem man die Klassen in Gruppen auf Namespaces aufteilt.

Zitat:
(C# ist mir auch zu inkonsistent für langfristige Projekte, die werfen ja alle zwei Jahre den halben Standard weg bei Microsoft...)

So schlimm isses auch nicht. Code von C# 1.2 (2003) ist heute vielleicht veraltet, aber alles ab C# 2.0 (2005) würde man allenfalls inelegant nennen.

Gefühlt ändert C++ auch ständig seine Pointertypen von x* über unique_ptr<x> und shared_ptr<x> und weak und whatever :twisted:
hydemarie
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 475
Erhaltene Danke: 51



BeitragVerfasst: Mi 11.05.16 20:48 
user profile iconjfheins hat folgendes geschrieben Zum zitierten Posting springen:
Gefühlt ändert C++ auch ständig seine Pointertypen von x* über unique_ptr<x> und shared_ptr<x> und weak und whatever :twisted:


Du meinst: Du hast bei C++ ständig zusätzliche Pointertypen, die die bestehenden funktional ergänzen, ohne deinen alten Code "deprecated" werden zu lassen? :D