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


von Andreas (Gast)


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)


Lesenswert?

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

von Andreas (Gast)


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)


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)


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)


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)


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)


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)


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. (Firma: Brainit GmbH) (fisa)


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)


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
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.