Laden...

Funktionen in eine .cs Datei auslagern und aufrufen.

Erstellt von saito vor 9 Jahren Letzter Beitrag vor 9 Jahren 5.958 Views
Thema geschlossen
S
saito Themenstarter:in
3 Beiträge seit 2015
vor 9 Jahren
Funktionen in eine .cs Datei auslagern und aufrufen.

Moin Moin, zugegeben ein schlecht gewählter Titwl, aber mir ist kein besserer eingefallen.

Ich Programmier seit meiner Kindheit in BASIC und möchte nun von Visual Basic 6 auf C# umsteigen.

Nun stehe ich vor einem ggf. für euch kleinem Problem, für mich großem Problem. Ich benutze zum Programmieren Mono und einen handelsüblichen Texteditor. Nun möchte ich Funktionen die ich schreibe in eine andere Datei auslagern und die aus der Hauptdatei aufrufen. Nur wie?

Beispiel:

Main.cs

using System;
public class mainPRG
{
  static public void Main()
 {
  ePrint("Hello World!");
 }
}

Funktion.cs

using System;
public class funktionPRG
{
 static public void ePrint(string text)
  {
   Console.WriteLine(text);
  }
}

Wie kann ich nun die Funktion ePrint aus der Klasse funktionPRG in der Klasse mainPRG aufrufen? So wie oben würde das ja nicht funktionieren, wie soll der MCS auch wissen das ePrint in einer anderen .cs Datei liegt, wie mache ich das nun in der Main.cs bekannt?

Thx 4 Help schonmal 😃

Mfg. Saito

189 Beiträge seit 2014
vor 9 Jahren

Hallo saito,

warum verwendest du kein MonoDevelop o.ä.?
Hast du einen Namespace definiert? Und liegen die Klassen - falls gewollt - im gleichen Namespace?

5.658 Beiträge seit 2006
vor 9 Jahren

Hi saito,

Ich benutze zum Programmieren Mono und einen handelsüblichen Texteditor.

Mach dir das Leben nicht unnötig schwer. Es gibt sehr gut ausgereifte und kostenlose Entwicklungsumgebungen für C#, mit denen solche Probleme gar nicht erst entstehen.

Beispielsweise werden die einzelnen Dateien mit den jeweiligen Klassen in einer Projektdatei (*.csproj) zusammengefaßt und der Kompiler sucht sich die Klassen daraus selbst zusammen.

Abgesehen natürlich von solchen nützlichen Features der Entwicklungsumgebungen wie ein Debugger, Unit-Tests, Profiler und selbst eine Projektübersicht.

Christian

Weeks of programming can save you hours of planning

S
saito Themenstarter:in
3 Beiträge seit 2015
vor 9 Jahren

Ich verzichte vorerst auf die IDE und möchte es erstmal per hand lernen. Zumal ich zu 90% fast nur noch Programme für die CMD schreibe von daher sehe ich im Moment keine notwendigkeit für eine IDE

Zum Thema Namespace, hab mir das eben mal fix in der MSDN nachgelesen, ich muss also nur

Main.cs

using System;
Namespace xMain
{
 public class mainPRG
 {
   static public void Main()
   {
    ePrint("Hello World!");
   }
 }
}

Funktion.cs

using System;
Namespace xFunktion
{
  public class funktionPRG
  {
    static public void ePrint(string text)
    {
     Console.WriteLine(text);
    }
  }
}

Das ganze so abändern und habe für jede Klasse eine eindeutige Bezeichnung geschaffen? In VB 6 hatte ich nicht viel mit Klassen bzw Objekten zu tun.

Müssen das denn zwei unterschiedliche Namenspace sein oder geht auch der selbe in beiden dateien?

MrSparkle: Mach dir das Leben nicht unnötig schwer.

Ich sehe das nicht als schwer an, ich lerne gerne von grund auf, zumal ich einen Texteditor immer dabei habe, eine große IDE nicht. Es mag sein das es in einer IDE ganze einfach zusammenklickbar ist, aber ich möchte wie schon geschrieben das gerne per hand wissen. Bis jetzt bin ich im Internet leider nicht fündig geworden

Mfg. Saito

2.207 Beiträge seit 2011
vor 9 Jahren

Hallo saito,

sorry, aber das ist wirklich der falsche Ansatz. Alles von Grund auf lernen ist ja schön und gut, aber wenn man Autofahren lernt hat man ja vorher auch nicht erst eins komplett zusammengebaut.
Nimm Sparkles Tipp wahr und nutze eine IDE, wenn es da ist. Zumal du dir fast jede Datei in einem Texteditor nachher anschauen kannst. Auch die csproj Datei etc.

Du musst den Namespace A auch in Klasse B bekannt machen. Dafür das Using.

Eine eindeutige Klassenbezeichung machst du schon durch den Namen der Klasse. Der Namespace fasst im Prinzip zueinander gehörige Klassen zusammen.

Schau dir OOP an, und lass das static weg. Dann kommst du schneller voran, ich behaupte sogar, dass dus besser verstehst.

Gruss

Coffeebean

5.658 Beiträge seit 2006
vor 9 Jahren

Hast du denn deine Änderung nicht ausprobiert? Dann gäbe es nämlich eine aussagekräftige Kompilermeldung. Einfach F6 drücken, aber du willst dir das Leben ja nicht einfach machen 🙂

Vielleicht hilft dir dann auch dieser Artikel weiter: [Hinweis] Syntaxfehler selbst lösen (Compilerfehlermeldungen)

Und ganz allgemein für den einfachen Einstieg: [FAQ] Wie finde ich den Einstieg in C#? oder 🛈.

Christian

Weeks of programming can save you hours of planning

C
224 Beiträge seit 2009
vor 9 Jahren

static public void Main()
{
    xFunktion.funktionPRG.ePrint("Programmieren ohne IDE war vorgestern.");
}

S
saito Themenstarter:in
3 Beiträge seit 2015
vor 9 Jahren

So ich bin nun dank dem IRC und einem freundlichen Programmierer endlich auf die Lösung gekommen. Sie ist eigentlich so einfach, dass man da auch selber hätte drauf kommen können, aber egal.

Da ggf. noch andere diese Informationen gebrauchen könnten, poste ich die Lösung nun einfach mal.

Main.cs

using System;
namespace p001
{
    class Class1
    {
        public static void ePrint(string Text)
        {
            Console.WriteLine(Text);
        }
    }
}

Funk.cs

using System;
namespace p001
{
    class Class1
    {
        public static void ePrint(string Text)
        {
            Console.WriteLine(Text);
        }
    }
}

Das ganze wie folgt Compilern.

mcs.exe Main.cs Funk.cs

Fertig. Und was ist daran nun bitte umständlich oder Schwer?

Hallo saito,

sorry, aber das ist wirklich der falsche Ansatz. Alles von Grund auf lernen ist ja schön und gut, aber wenn man Autofahren lernt hat man ja vorher auch nicht erst eins komplett zusammengebaut.

Nun da wird aber gerade Birne mit Apfel verglichen. Wenn Jemand Autofahren lernt, tut er dies indem der Fahrlehrer jederzeit mit seinen Pedalen eingreifen kann, wenn jemand Schwimmen lernt, tut er das auch Schritt für Schritt im flachen Wasser und springt nicht gleich vom 3m Turm ins Wasser.

Ich verstehe gerade nicht so recht, wieso die Vorstellung, das jemand nur mit einem Texteditor und dem nackten Compiler programmieren will, soviel Unverständnis mit sich bringt.

Das gleiche Programm in Visual Studio Express 2013 verursacht 143.360 Bytes also gut 140 KB, die beiden Dateien lediglich 598 Bytes nichtmal 1KB. Ich meine das kann man nun als kleinkariert ansehen, aber ich hab auf einer C64 angefangen zu Programmieren und bis Win 9x war Speicher ein kostabres Gut, was man nicht einfach verschwendet. Mag heute kein Thema mehr sein aber verschwenderisch zu agieren, egal ob überfluss vorhanden ist oder nicht, ist nie gut wie ich finde.

  
static public void Main()  
{  
    xFunktion.funktionPRG.ePrint("Programmieren ohne IDE war vorgestern.");  
}  
  

static public void Main()
{
    xFunktion.funktionPRG.ePrint("Inhaltlich wertvolle Kommentare anscheinend auch.");
}

Mfg. Saito

5.658 Beiträge seit 2006
vor 9 Jahren

Hi saito,

ja, du hast eine große Menge an Speicher gespart. Aber du hast auch fast 6 Stunden gebraucht und 5 (!) Leute beschäftigt, um ein Problem zu lösen, das unter normalen Umständen überhaupt kein Problem wäre.

Und jetzt fragst du uns, was daran eigentlich so schwer war? 🤔

Wir werden diese Diskussion hier nicht vertiefen und ich möchte dich bitten, zukünftig unseren [Hinweis] Wie poste ich richtig? zu beachten.

Christian

Weeks of programming can save you hours of planning

Thema geschlossen