C# kleine Funktionssammlung aufbauen und diese in Programmen nutzen

Gast #5265414
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
}
Gast #5265464
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
Gast #5265501
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.
Gast #5266855
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.
#5271059
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
(Firma: Brainit GmbH) #5271082
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
#5271114
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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren