Ein Beispiel für den Aufbau einer abstrakten Klasse in C#

Im Beispiel werden zur Demonstration nicht abstrakte Klassen implementiert (Addition und PI) sowie die Abstrakte für Subtraktion, Division und Multiplikation

using System;
using System.Globalization;
 
namespace AbstractClass
{
    abstract class Calculator
    {
        public double Addition(double num1, double num2) //non abstract method
        {
            return (num1 + num2);
        }
        public abstract double Multiplikation(double num1, double num2); //abstract method       
        public abstract double Division(double num1, double num2); //abstract method       
        public abstract double Subtraktion(double num1, double num2); //abstract method       
    }
 
    class Program : Calculator
    {
        public override double Multiplikation(double n1, double n2)
        {
            return (n1 * n2);
        }
 
        public override double Division(double n1, double n2)
        {
            return (n1 / n2);
        }
 
        public override double Subtraktion(double n1, double n2)
        {
            return (n1 - n2);
        }
 
        static void Main(string[] args)
        {
            Program obj = new Program();
 
            const string fehlermeldung = "Bitte eine gültige Zahl - Format: #.#";
          
            // Abfrage der Werte
            Console.WriteLine("PI");
            double pi = GetUserInput("Ein Wert:", fehlermeldung);
             
            Console.WriteLine("Addition | Multiplikation | Subtraktion");
            double a = GetUserInput("1. Wert:", fehlermeldung);
            double b = GetUserInput("2. Wert:", fehlermeldung);
 
            Console.WriteLine("Division | Eingabe von 0 nicht erlaubt");
            double aZero = GetUserInput("1. Wert:", fehlermeldung, false);
            double bZero = GetUserInput("2. Wert:", fehlermeldung, false);
 
            // Berechnungen durchführen
            double resultPi = pi*Math.PI;
            double resultAddition = obj.Addition(a, b);
            double resultSubtraktion = obj.Subtraktion(a, b);
            double resultMultiplikation = obj.Multiplikation(a, b);
            double resultDivision = obj.Division(aZero, bZero);
 
            // Ausgabe an Benutzer
            Console.WriteLine("\nErgebnisse:");
            Console.WriteLine("PI\t\t:{0}*{1}={2}", pi, Math.PI.ToString(CultureInfo.InvariantCulture), resultPi);
            Console.WriteLine("Addition\t:{0}+{1}={2}", a, b, resultAddition);
            Console.WriteLine("Subtraktion\t:{0}-{1}={2}", a, b, resultSubtraktion);
            Console.WriteLine("Multiplikation\t:{0}*{1}={2}",a,b, resultMultiplikation);
            Console.WriteLine("Division\t:{0}+{1}={2}",aZero, bZero, resultDivision);
             
            Console.ReadLine();
 
        }
 
        static double GetUserInput(string question, string errorMessage, Boolean allowZero = true)
        {
            double a;
            Console.Write(question);
            if (double.TryParse(Console.ReadLine(), out a) )
            {
                if (!allowZero && (int)a == 0)
                {
                    Console.WriteLine("0 nicht erlaubt.");
                    a = GetUserInput(question, errorMessage);
                }
 
            }
            else{
                Console.WriteLine(errorMessage );
                a = GetUserInput(question, errorMessage);
            }
            return a;
        }
    }
}

Neuste Einträge

Synology Docker Image

Projekt vorbereiten und veröffentlichen

Dockerfile erstellen

dotnet publish -c Release -o ./publish

 

 

Lege im selben NAS-Verzeichnis eine Datei Dockerfile an:

FROM mcr.microsoft.com/dotnet/aspnet:6.0 AS base
WORKDIR /app
COPY publish/ ./
EXPOSE 80
ENTRYPOINT ["dotnet", "MeinProjekt.dll"]

Passe den Namen der DLL an dein Projekt an.

Optional: HTTPS-Zertifikat erzeugen

dotnet dev-certs https -ep ./aspnetapp.pfx -p <Passwort>

 

Docker-Image auf dem NAS bauen

ssh admin@<NAS-IP>
cd /volume1/docker/meinprojekt
sudo docker build -t meinprojekt:latest .

Container starten

sudo docker run -d -p 8080:80 --name meinprojekt meinprojekt:latest

 

Reverse Proxy einrichten (optional)

Im DSM unter Systemsteuerung > Anwendungsportal > Reverse Proxy:

  • Quelle: https://meinprojekt.de → Ziel: http://localhost:8080

  • SSL-Zertifikat zuweisen

 

Wiederverwendbare Struktur

docker/
├── meinprojekt/
│   ├── Dockerfile
│   ├── publish/
│   └── configs/
├── https/
└── keys/