Forum: PC-Programmierung C# kleine Funktionssammlung aufbauen und diese in Programmen nutzen


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Andreas (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich brauch einen kleinen "refresh"... habe vor über 10 Jahren mal etwas 
c# gelernt, nun habe ich wieder lust bekommen.

möchte aber gleich "sauber" damit anfangen.

Die Hauptfrage die sich mir gerade stellt, wie ich kleine Funktionen 
(Methoden) in einer .cs Daten schreiben kann und diese dann in diversen 
Programmen nutzen kann. (z.B. ein Timestamp-Converter)


FunktionsSammlung.cs
1
using ...
2
3
namespace MyFunctions 
4
{
5
  //wird hier eine KLASSE benötigt???
6
  public class Funktions
7
  {
8
9
    public string TS2DateString(int timeStamp)
10
    {
11
      return "Zeit";
12
    }
13
14
  }
15
16
17
}

Hauptprogramm.cs
1
using ...
2
using MyFunctions
3
4
namespace MyTool
5
{
6
  public class Main
7
  {
8
    => wie bekomme ich hier sauber zugriff auf z.B. dem Timestampconverter
9
10
    // muss ich wirklich hier dann eine klasse öffnen
11
    Funktions fnc = new Funktions();
12
13
    fnc.TS2DateString...
14
  }
15
16
}

von Dominik (Gast)


Bewertung
1 lesenswert
nicht lesenswert
Mach eine statische klasse daraus, dann muss die nicht instanziert 
werden...

von Andreas (Gast)


Bewertung
0 lesenswert
nicht lesenswert
hm.

okay,

dann hab ich jetzt


> static class functions



aber ich muss bei mir im Main trotzdem

> functions.TS2DateString
schreiben

=> oder was mach ich falsch?

von Leo (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Hallo Andreas,

ob deine Klasse 'static' sein muss oder nicht, kommt immer darauf an, 
was diese tun soll. Wenn du 'nur' Konverter-Methoden schreiben möchtest, 
welche sich in der Regel nichts weiter merken müssen, dann ist 'static' 
das Richtige.

FunktionsSammlung.cs
1
using ...
2
3
namespace MyFunctions 
4
{
5
  public class Funktions
6
  {
7
    public string TS2DateString(int timeStamp)
8
    {
9
      return "Zeit";
10
    }
11
  }
12
}


Hauptprogramm.cs
1
using ...
2
using MyFunctions
3
4
namespace MyTool
5
{
6
  public class Main
7
  {
8
    Funktions.TS2DateString(...
9
  }
10
}

Ansonsten erläutere doch bitte genau, was die Klasse / Methoden genau 
machen sollen, damit dir besser geholfen werden kann.
Frohes Programmieren.

Gruß Leo

von Andreas (Gast)


Bewertung
0 lesenswert
nicht lesenswert
ja, genau so hab ich das...

ich habe nur gehofft die Klassenbezeichnung Wegzubekommen vor JEDER 
Methode

klasse.methode()

aber passt schon so!

von Dominik (Gast)


Bewertung
-1 lesenswert
nicht lesenswert
Es gibt noch die möglichkeit, erweiterungsmethoden zu erstellen.

Funktionssammlung.cs
1
using...
2
namespace MyFunctions 
3
{
4
  public class Funktions
5
  {
6
    public static string TS2DateString(this int timeStamp)
7
    {
8
      return "Zeit";
9
    }
10
  }
11
}

Hauptprogramm.cs
1
using ...
2
using MyFunctions
3
4
namespace MyTool
5
{
6
  public class Main
7
  {
8
   int timestamp = 123456;
9
   String datestring = timestamp.TS2DateString();
10
  }
11
12
}

Damit erweiterst du quasi int um die Methode TS2DateString und musst 
nicht die Klasse angeben.

von Daniel -. (root)


Bewertung
0 lesenswert
nicht lesenswert
Mit c#7 geht das ohne Klasse davorzuschreiben
Am beispiel System.Console oder System.Math

using static System.Console;
using static System.Math;

... Im code später z.B.

double x = Sin(0);
WriteLine("test");

von Dirk (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Du willst sauber programmieren, dann solltest Du eins verinnerlichen.

Programmiere immer gegen ein Interface. Interfaces sind leider unter c# 
nicht statisch möglich, darum muss immer erst eine Instanz generiert 
werden. Jetzt muss man hier unterscheiden, ob man wirklich eine API 
programmiert oder extensions.

von Nikolai W. (beginner007)


Bewertung
0 lesenswert
nicht lesenswert
Andreas schrieb:
>   //wird hier eine KLASSE benötigt???

Da C# eine objektorientierte Sprache ist werden immer Namespaces und 
Klassen benötigt.
Es gibt auch keine Prozeduren/Funktionen, sondern Methoden.
(Wenn man von lokalen Funktionen in C#7 absieht - aber die werden dich 
eher verwirren)

"using static" sollte man behutsam einsetzen.
Sonst weiß man am Ende nicht mehr was die ganzen Methoden bedeuten.
https://docs.microsoft.com/de-de/dotnet/csharp/language-reference/keywords/using-static
Geht übrigens schon seit C#6 (Visual Studio 2015).

Erweiterungsmethoden:
https://docs.microsoft.com/de-de/dotnet/csharp/programming-guide/classes-and-structs/extension-methods

Außerdem ist das .net Framework sehr umfangreich.
Ich würde erst mal googeln, ob es für dein Problem schon eine fertige 
Lösung gibt.

Weiß nicht genau was du möchtest, aber ist vielleicht das?
https://stackoverflow.com/questions/5788883/how-can-i-convert-a-datetime-to-an-int

: Bearbeitet durch User
von Michael R. (fisa)


Bewertung
1 lesenswert
nicht lesenswert
Nikolai W. schrieb:
> Erweiterungsmethoden:

da schreibt sogar MS selbst:
> Im Allgemeinen wird empfohlen, dass Sie Erweiterungsmethoden sparsam und nur 
wenn unbedingt notwendig implementieren. Wenn möglich sollte der Clientcode, der 
einen vorhandenen Typ erweitern muss, dies durch die Erstellung eines neuen, vom 
vorhandenen Typ abgeleiteten Typs durchführen.

Und das solltest du beherzigen

von Nikolai W. (beginner007)


Bewertung
0 lesenswert
nicht lesenswert
Stimmt. Eigentlich sind Erweiterungsmethoden für dieses Beispiel falsch!
Ich hab's auch nicht empfohlen, nur einen Link zum Nachlesen eingefügt 
(weil es weiter oben erwähnt wurde).

Nur weil der Typ (int) übereinstimmt, heißt es nicht gleich, dass man 
diese Syntax nutzen sollte.
Denn mehr hat sein Timestamp mit Integer logisch nichts gemeinsam.

: Bearbeitet durch User

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.