dedlfix: C-Sharp Kalenderwoche

Beitrag lesen

Hi!

ich die Klasse nun in einer extra Datei laufen und auch den richtige using-Verweis laufen. Jetzt hänge ich nur noch an dem Aufruf der Klasse. Wäre nett, wenn mir da jmd hilft. Wie schon geschrieben kenne ich mich mehr in C aus (also nicht objektorientiert).

Zum besseren Verständnis wiederhole ich mal deinen jetzigen Code-Aufbau.

namespace ConsoleApplication1
  class Program
    static void Main(string[] args)

namespace ConsoleApplication1 // [*]
  public class DateUtils
    public class CalendarWeek
      public int Year;
      public int Week;
      public CalendarWeek(int year, int week)

public static CalendarWeek GetCalendarWeek(DateTime date)
    public static CalendarWeek GetGermanCalendarWeek(DateTime date)

Du schachtelst da die CalenderWeek-Klasse [**] in die DateUtils. Das kann man machen, aber gerade als Anfänger würde ich das nicht empfehlen. Da bekommst du nur noch eine Namens-Ebene hinzu ohne groß was zu gewinnen. Du musst den Typ nämlich im nicht zur DateUtils-Klasse gehörenden Code nun immer als DateUtils.CalendarWeek ansprechen. Ich würde das nur dann so schachteln, wenn es sich um einen wenig bedeutenden und nur im Zusammenhang mit der äußeren Klasse sinnvoll zu verwendenden Typ handelt. Aber das ist nur nebensächlich.

Die beiden Methoden GetCalendarWeek und GetGermanCalendarWeek unterscheiden sich nur innerlich, weswegen hier die Betrachtung auf GetCalendarWeek eingeschränkt werden kann. Statische Methoden ruft man mit dem Klassennamen gefolgt vom Methodennamen auf, in dem Fall also DateUtils.GetCalendarWeek(). Als Parameter muss noch ein DateTime-Wert übergeben werden. Das ist nichts besonderes, denn das geht genau so wie bei der herkömmlichen Programmierung.

[*] Angenommenerweise ist es der selbe Namespace. Ansonsten braucht das Hauptprogramm noch ein using auf diesen Namespace.
[**] struct (ein Werttyp - Value Type) fände ich angebrachter als class (ein Verweistyp - Reference Type). Es werden nur Werte gepeichert und die Möglichkeiten einer Klasse weder genutzt noch benötigt. Vergleiche mit DateTime, das ist auch nur struct und nicht class.

Jetzt mal so mehr oder weniger aus dem Bauch heraus würde ich für den Anfang so etwas in der Richtung vermuten:
DateUtils kw= new DateUtils.CalendarWeek();

Nein. Versuch dir bitte selbst zu erklären, was du mit dem jeweiligen Element bezweckst, das du da notiert hast.

Der Ergebnis soll eine CalendarWeek-Struktur/Klasse sein. Also brauchst du eine Variable eines solchen Typs. CalenderWeeks ist derzeit eine Unterklasse von DateUtils, also lautet die Typbezeichnung: DateUtils.CalendarWeek
Und dann möchtest du das Ergebnis der Methode GetCalendarWeek() (oder die andere) darin ablegen. GetCalendarWeek ist als statische Methode angelegt, also ... siehe oben.

Wie übergebe ich als Paramter das aktuelle Datum?

Schau dir die Struktur DateTime genauer an. Die hat eine Eigenschaft namens Now.

Mein Lösungsweg wäre übrigens ein anderer und käme nur mit der Struktur CalendarWeek aus. Der gäbe ich neben den beiden Eigenschaften und dem Konstruktor die statische Methode GetFromDate() auf den Weg und zwar mit den beiden Signaturen

CalendarWeek GetFromDate(DateTime date)
  CalendarWeek GetFromDate(DateTime date, bool german)

Lo!