Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Portal
  • |
  • Mitglieder
Beiträge von MarsStein
Thema: Benachrichtigung, dass Panel ausserhalb eines Spielfeldes (Panel) ist, kommt zu spät
Am im Forum: GUI: Windows-Forms

Hallo,

wenn Du die Schlange über einen Timer bewegst, wird das wohl daran liegen, dass im exakten Moment des verlassens gerade kein Tick ausgeführt wird, Du also erst beim nächsten Tick reagierst, an dem die Schlange eigentlich schon etwas weiter ist.

Gruß, MarsStein

Thema: TargetInvocationException wird beim Starten geworfen
Am im Forum: GUI: WPF und XAML

Hallo,

hast Du mal die InnerException bzw. den Stacktrace der Exception angesehen?
Da sollten etwas brauchbarere Informationen zu finden sein.

Gruß, MarsStein

Thema: Sehe beim Aufruf über den Browser auf den FTP nur eine "robots.txt" - Wie richtig auf FTP zugreifen?
Am im Forum: Netzwerktechnologien

Hallo,

Zitat
Ich müsste also nicht den Router im Anmeldenamen mit Zwischenschalten?
Nein. Du musst aber davon ausgehen, dass solange FileZilla Dir auch nicht das gewünscht Ergebnis bringt, noch ein Konfigurationsproblem vorliegt.
Zitat
Ich bin mir aber sicher, dass ich die Freigaben geregelt hab...
Das müsstest Du wohl nochmal überprüfen. Irgendwas stimmt da noch nicht.

Gruß, MarsStein

Thema: .NET Core Anwendung nativ kompilieren
Am im Forum: Entwicklungs- und Laufzeitumgebung (Infrastruktur)

Hallo,

schau mal hier bei GitHub, da steht eigentlich alles: Using CrossGen to Create Native Images

Und ja, die crossgen.exe die Du gefunden hast, solltest Du verwenden können.

Gruß, MarsStein

Thema: ASP.NET - Daten werden nicht in der ComboBox angezeigt
Am im Forum: Web-Technologien

Hallo,

Zitat
dort arbeitest du dann mit ganz normalen HTML-Select's
Wobei ein <select> leider keine Combobox ist.
Siehe Combo box in HTML 5 and the HTML 4 equivalent

Gruß, MarsStein

Thema: WebClient sendet mit langer Verzögerung
Am im Forum: Web-Technologien

Hallo,

könnte auch daran liegen, dass Dein Programm nach einem Proxy sucht. Oder sind virtuelle Netzwerkkarten auf der Maschine im Spiel?
Schau mal in Winform application first web request is slow
Der Vorschlag dort, den Proxy auf null zu setzen, widerspricht allerdings der Doku, die sagt, dass man GlobalProxySelection.GetEmptyWebProxy() benutzen soll.

Gruß, MarsStein

Thema: VBA und C# interoperability
Am im Forum: Office-Technologien

Hallo,

ist Eure COM-DLL denn richtig im System registriert (Option "Register for COM interop" in den Projektoptionen unter "Build", bzw. regasm)?

Ansonsten schau mal hier: Extend your VBA code with C#, VB.NET, or C++/CLI

Gruß, MarsStein

Edit: oder hier: Walkthrough: Calling Code from VBA in a Visual C# Project

Thema: Console: Verwendung der ProgessBar
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Hallo,

Dein Code innerhalb des using-Blocks ergibt überhaupt keinen Sinn:

                            while (source.Length > destination.Length)
                            {
                                File.Copy(Path.Combine(source, file), Path.Combine(dest, file), false);
                                progress.Report((double)(dest.Length * 100) / (double)source.Length);
                                Thread.Sleep(20);
                            }
schon die while-Schleife verstehe ich nicht. Du kopierst nur dann, wenn der Pfad zur Ausgabedatei inklusive Dateinamen kürzer ist als der der Originaldatei ohne Dateinamen... naja, kann ja sein, dass Du das so willst.

Dann aber: progress.Report((double)(dest.Length * 100) / (double)source.Length);
Mach Dir mal klar was da passiert. Du multiplizierst die Länge des Zielpfades(!!!) mit 100 und teilst dann durch durch die Länge des Quellfades. Das ist bestimmt nicht das, was Du willst. Beachte vor allemn auch, dass die benutzte Klasse für den Progress keinen Prozentwert haben will, sondern einen Wer zwischen 0 und 1, wobei die 1 dann 100% entspricht.

Überleg Dir nochmal genau, was dein Code tun soll und versuche es nochmal von vorn. Wenn es dann Probleme gibt, kannst Du gerne hier nochmal nachfragen.

Gruß, MarsStein

Thema: Wo erstellt man das Lock-Objekt beim Zugriff auf eine Methode von mehreren Threads?
Am im Forum: Grundlagen von C#

Hallo,

wird daran liegen, dass Du Clone() benutzt. Das ist eine shallow copy der Bitmap, die Pixeldaten werden nicht tatsächlich geklont, sondern die des Originalobjektes benutzt.

Wenn Du tatsächlich eine vollständige Kopie der Bitmap rausgeben willst, benutze den entsprechenden Konstruktor Bitmap(Image).

Gruß, MarsStein

Thema: Html-Datei ohne Fenster für die Druckauswahl direkt drucken
Am im Forum: Grundlagen von C#

Hallo,

der Dialog kommt aber eben genau von dem Programm, das das HTML für Dich rendert bevor es an den Drucker gesendet wird. Mit ShellExecute = true und dem Verb = "print" wird eben ein Programm ausgeführt, das in der Registry für diesen Dateityp und dieses Verb gelistet ist. Das wird dann für gewöhnlich mit einer Kommandozeilenoption aufgerufen, die nur den Druckdialog anzeigt.
Kannst ja mal bei Dir in HKEY_CLASSES_ROOT\htmlfile\shell\Print\command gucken, da sollte das Kommando drinstehen.

Gruß, MarsStein

Thema: Zentrales Verzeichnis für DLLs erstellen, aus dem jedes Programm lesen kann
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Hallo,

mehrere Möglichkeiten:

1. GAC
Du kannst Deine DLLs statt in einen eigenen Ordner, in den GAC installieren. Dann werden sie von jeder .NET-Anwendung gefunden.

2. Referenzen anpassen
Stell Deine DLL-Projekte so ein, dass sie direkt in Deinen Zielpfad bauen, oder kopiere diese von Hand dahin. Passe dann in dem Projekt, das die DLLs verwenden soll, die Referenzen (im Eigenschaftenfenster) so an, dass nicht mehr die Projekte, sondern die DLLs direkt verwiesen werden, und dass "Copy local" auf false steht. Dann müsste die DLL immer in diesem Verzeichnis gesucht werden.

3. AppDomain.AssemblyResolve
Du kannst mit den Anwendungen, die die DLLs nutzen sollen, das AppDomain.AssemblyResolve-Ereignis abonnieren und dort den gewünschten Pfad selbst auflösen.

Bei all diesen Möglichkeiten bedenke aber Folgendes:
Wenn Du die DLLs an einem zentralen Ort ablegst, bekommst Du ein Problem, wenn Du in einer der gemeinsam genutzten DLLs einen "Breaking Change" machst, müssen ggf. alle Anwendungen aktualisiert werden. Wenn Du wie bisher mit lokalen Kopien der DLLs arbeiuest, bekommst Du dieses Problem nicht.

Gruß, MarsStein

Thema: [Erledigt] Prüfen, ob eine Remoteverbindung vollständig aufgebaut wurde (und kein Abbruch vorkam)
Am im Forum: Netzwerktechnologien

Hallo,

Ideen schon - die einfachste wäre wahrscheinlich, die Berechtigung zu erteilen, wobei ich mal davon ausgehe, dass das nicht in Frage kommt - jedenfalls nicht direkt.
Du könntest aber evtl. versuchen query session unter einem anderen Benutzer ausführen zu lassen (Stichwort Impersonation), wobei Du dafür dann wahrscheinlich auch die Rechte nicht hast. Aber Du kannst es Dir ja trotzdem mal anschauen.

Eine andere Möglichkeit wäre, einen Dienst zu schreiben, der auf dem Server läuft und von dort ermittelt, ob der Remotebenutzer angemeldet ist. Diesen Dienst könntest Du mit Deinem Programm ansprechen und so die gewünschte Information erhalten.
So ein Dienst könnte natürlich auch auf jedem anderen Server in de rDomäne oder sogar auf den Clients liegen, vorausgesetzt, er läuft unter einem Benutzerkonto, das Berechtigungen für query session hat. Den könntest Du dann auch abfragen mit Deinem Programm.

Eine Idee wäre noch, ein Login-Script für den Remotebenutzer auf dem Server anzulegen, das die Datei auf dem Netzlaufwerk anlegt, und ein Logout-Script, das sie wieder löscht.
Ich weiss allerdings jetzt aus dem Stegreif nicht, ob und wie Du dann an den tatsächlichen Benutzer kommst, der die Verbindung aufgebaut hat. Wenn Du das hinkriegst, ist das sicherlich die einfachste Möglichkeit.

Wenn nicht, ließe sich diese Hürde aber ggf. durch eine zweite Datei umgehen: eine legst Du mit dem Benutzer an wie bisher auch, die andere wie oben beschrieben vom Server. Nur wenn auch die zweite Datei existiert, gibt es auch eine Remotesession. Das bringt Dir aber nix im Bezug darauf, dass der falsche Benutzer weiterhin in der Datei landen würde. Und irgendwie erscheint das alles irgendwie von hinten durch die Brust ins Auge.

Gruß, MarsStein

Thema: Datei nach einem Wort durchsuchen und die Zahl davor speichern
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Hallo,

da gebe ich LaTino völlig recht. Man sollte sich NIE auf sowas verlassen, wenn es nicht klar dokumentiert ist. 7z könnte zum Beispiel auch jederzeit das Format ändern (z.B. noch eine zusätzliche Spalte einbauen), so dass der Offset sich verschiebt. Oder es könnt eine auch Spalte je nach Inhalt unterschiedlich breit sein.
Wenn Du die letzte Zeile vernünftig nach dem Wort "files" durchsuchst, und die Zahl davor nimmst, hast Du gute Chancen, dass es auch nach einer etwaigen Formatänderung noch passt (ausser das Format ändert sich ganz grundlegend, aber dann bekommst Du sowieso ein Problem).

Gruß, MarsStein

Edit:

Zitat
Ich möchte das mein String nach 53 Zeichen beginnt das ist mit damit zu lösen.
Dann soll er aber abbrechen wenn ein Leerzeichen erscheint.
...
Das ist mit dieser Verwendung von .Substring leider nicht möglich.
Es soll tatsächlich Fälle geben, wo man mehrere String-Operationen nacheinander ausführen muss um zum Ergebnis zu kommen...

Thema: Konfigurationsdateien gegen Veränderung sichern
Am im Forum: Rund um die Programmierung

Hallo,

also ich denke ich würde den Verwaltungsaufwand in Kauf nehmen, eine Gruppe mit Schreibrechten anzulegen und die berechtigten Benutzer dort hinzuzufügen.

Grund: Wenn die Berechtigung am Benutzer hängt, bleibt der Zugriff i.d.R. auch geschützt, weil die Leute mit ihrem Domain-Passwort eher vorsichtig sind.
Wenn man einfach nur ein (unpersonalisiertes) Passwort braucht, um Schreibrechte zu erhalten, macht das unter Umständen recht schnell die Runde und ist dann bald Personen bekannt, die da nix verloren haben.

Gruß, MarsStein

Thema: Tabellen auf Uneinstimmigkeiten vergleichen
Am im Forum: GUI: Windows-Forms

Hallo,

wenn Du meint ob es einen Code gibt der ohne Anpassungen genau für Dein roblem passt - eher nicht. Zumindest die Logik, welche Datensätze als gleich interpretiert werden, musst Du sicher selbst schreiben.

Gruß, MarsStein

Thema: HttpWebRequest schlägt fehl, über InternetExplorer Adresse erreichbar
Am im Forum: Web-Technologien

Hallo,

schau mal hier: The request was aborted: Could not create SSL/TLS secure channel

hth

Gruß, MarsStein

Thema: Methode ausführen, wenn zwei von drei Bedingungen erfüllt sind
Am im Forum: Grundlagen von C#

Hallo,

also ich hab auch meine liebe Mühe zu versthen was hier gemeint ist.

Kannst Du mal erläutern, was es für Dich bedeutet, einen Indikator bis 17 und einen anderen bis 80 auszuführen?
Darunter kann ich mir echt nix vorstellen, und ich glaube dass es vielen ähnlich geht...

Gruß, MarsStein

Thema: JavaScript drucken unterbinden bzw ohne Dialog drucken
Am im Forum: Web-Technologien

Hallo,

das WinForms WebBrowser-Control ha dafür die Print()-Methode.
Im WPF WebBrowser fehlt die leider.
Dafür kannst Du aber mal hier gucken:
System.Windows.Controls.WebBrowser: Print Document?

Gruß, MarsStein

Thema: SerialPort erneut öffnen nach Close() -> Problematisch wegen Dispose() oder nicht
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Hallo,

hättest Du ausser der Doku für Close auch mal in die für Open geschaut,hättest Du unter Remarks folgendes gefunden:

Zitat von MSDN
Only one open connection can exist per SerialPort object.

The best practice for any application is to wait for some amount of time after calling the Close method before attempting to call the Open method, as the port may not be closed instantly.
Das würde ich zumindest so interpretieren, dass Du die Instanz mehrfach verbbinden und trennen kannst.

Gruß, MarsStein

Thema: Wie kann ich den Kopierfortschritt in Prozent auf der Konsole anzeigen?
Am im Forum: Rund um die Programmierung

Hallo,

Zitat
Jedoch steht dann nur wie viele Dateien noch verbleiben.
Meinst Du mein Beispiel? Dann stimmt das so nicht.
Die Zahl, die hinter "File: " ausgegeben wird, ist der Fortschritt der Einzeldatei, die hinter "Total: " der Gesamtfortschritt, jeweils in Prozent.

Was die anderen Angaben betrifft, die Du haben willst, schau mal in die jeweiligen EventArgs rein, da ist schon alles drin. Du musst es nur noch ausgeben.
Ist wie gesagt nur ein kleines einfaches Beispiel, wie Du die Klasse überhaupt auf der Konsole nutzen kannst.

Gruß, MarsStein

Edit: Die Restzeit für den Gesamtfortschritt musst Du selbst berechnen (wie Abt schrieb, über Dreisatz). Das ist allerdings dann ein Wert, der zu Anfang recht ungenau ist und dann mit de rZeit sich der Realität immer weiter annähert. Wie man das auch sonst von solchen Zeitangaben kennt ;)

Thema: Wie kann ich den Kopierfortschritt in Prozent auf der Konsole anzeigen?
Am im Forum: Rund um die Programmierung

Hallo,

um mal die Eingangsfrage zu beantworten:

Zitat
ob ich diese Klasse vielleicht mit ein paar kleinen Änderungen trotzdem verwenden kann

Ja, kannst Du. Es sind sogar überhaupt keine Änderungen an der Klasse nötig.
Hier mal ein ganz einfaches Beispiel (schöner wäre es natürlich mit async/await):

using System;
using System.ComponentModel;
using System.Threading;
using de.myCSharp.Snippets.CopyComponent;

namespace ConsoleSample
{
    class Program
    {
        static void Main(string[] args)
        {
            BackgroundWorker bw = new BackgroundWorker();
            BinaryCopy bc = new BinaryCopy();
            ManualResetEvent mre = new ManualResetEvent(false);
            bc.BinaryCopyEvent += new BinaryCopyStepEventHandler(bc_BinaryCopyEvent);
            bc.FileListCopyEvent += new FileListCopyEventHandler(bc_FileListCopyEvent);
            bw.RunWorkerCompleted += delegate { mre.Set(); };
            bw.DoWork += delegate 
            {
                bc.CopyFolder(@"C:\my\source", @"C:\my\destination", false);
            };
            bw.RunWorkerAsync();
            mre.WaitOne();
            Console.ReadLine();
        }

        static void bc_FileListCopyEvent(object sender, FileListCopyEventArgs e)
        {
            Console.CursorLeft = 0;
            Console.CursorTop = 1;
            Console.Write("Total: {0}", e.Percent);
        }

        static void bc_BinaryCopyEvent(object sender, BinaryCopyStepEventArgs e)
        {
            Console.CursorLeft = 0;
            Console.CursorTop = 0;
            Console.Write("File: {0}", e.Percent);
        }

    }
}

Gruß, MarsStein

Thema: Windows CE 5.0: Dynamisches anwählen von PictureBox via Code und Zufallszahl
Am im Forum: GUI: Windows-Forms

Hallo Coralino,

du solltest statt rnd.Next(1,3) besser rnd.Next(0,3) verwenden.

Die untere Grenze ist inklusive, die obere exklusive, deshalb wirst Du nie die 3 ziehen.
Willst Du auch nicht, weil Dein Array-Index nullbasiert ist, Dein Index also bei 3 Elementen von 0 bis 2 reicht.
Um also die richtigen 3 Zahlen für den Index zu bekomen, rnd.Next(0,3).

Gruß, MarsStein

Thema: Windows CE 5.0: Dynamisches anwählen von PictureBox via Code und Zufallszahl
Am im Forum: GUI: Windows-Forms

Hallo,

@dannoe, das hatte ich auch schon getippt, aber Du warst schneller.

Eigentlich ist das ein Spezialfall von [FAQ] Variablennamen zur Laufzeit zusammensetzen / Dynamisches Erzeugen von Controls , da sind noch mehr Möglichkeiten aufgezeigt.

Gruß, MarsStein

Thema: Überladung von Konstruktoren mit quasi gleicher Signatur
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Hallo,

Zitat
400 Zeilen für Datentypen (inkl. Equals, HashCode, operatoren, ToString usw. )
Naja, implementierst Du halt das was Du brauchst.
Wenn man keine Operatoren oder Equals braucht, kann man's eben weglassen. Macht ja nicht in allen Fällen Sinn.
Ein paar ganz einfache Typen sind IMO schnell erstellt.

Um 200 Zeilen Code zu verbessern... naja - ich versuche solche Fragen eher allgemein zu betrachten. Wir wissen ja gar nicht, in welchem Zusammenhang der TE das braucht.

Meiner Erfahrung nach machen eigene Typen eigentlich immer Sinn, wenn man mit solchen Größen zu tun hat und das Programm nicht nur eben zum Lernen oder als Fingerübung dient.

Gruß, MarsStein

Thema: Überladung von Konstruktoren mit quasi gleicher Signatur
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Hallo,

Zitat
Extra Datentypen halte ich auch für Weit über das Ziel hinaus, da diese dann auch nur jeweils eine Eigenschaft mit repräsentieren.
Viel zu viel Aufwand nur um eine Trennung der Konstruktor Parameter umzusetzen.
Wenn es nur um die Konstruktorparameter geht - vielleicht.

Aber normalerweise macht man ja auch noch irgendwas anderes mit diesen Daten bzw. Typen. Man erstellt ja nicht aus Spaß an der Freud irgendwelche Objekte.
Und dann ist Typsicherheit doch sicherlich wünschenswert.

Wie ich bereits schrieb, haben solche Typen auch viele weitere Vorteile. Ich kann dann zum Beispiel auch Operatoren wie +/- definieren und so sicherstellen, dass ich wohl ein Gewicht zu einem Gewicht addieren kann, nicht aber versehentlich ein Gewicht zu einer Dichte - Typsicherheit eben, mit allem was dazugehört.
Mag auch daran liegen, dass ich beruflich sehr viel mit verschiedenen physikalischen Größen zu tun habe - bei uns ist das dann durchweg mit solchen semantischen Typen umgesetzt und es bringt uns viele Vorteile und macht den Code verständlicher.

Gruß, MarsStein

Thema: Überladung von Konstruktoren mit quasi gleicher Signatur
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Hallo,

Zitat
Da jetzt eigens neue Klassen zu erfinden, die dann auch einen Konstruktor haben, woraus sich dann Konstruktoren in Konstruktoren ergeben
...
Weil eigene Konstruktor-Konstruktor-Klassen zu erfinden ist numal aufwändig
das ist aber gar nicht das, worum es geht.
Bei meinem Ansatz z.B. ist das Ziel, Daten mit unterschiedlicher Semantik in unterschiedliche Typen zu packen. Gerade bei physikalischen Größen drängt sich mir persönlich diese Vorgehensweise geradezu auf.
Das Konzept ist auch nicht extra oder ausschließlich dafür da, verschiedene Konstruktoren bereitstellen zu können. Es steckt viel mehr dahinter, und das kann einem das Leben auch an vielen anderen Stellen erleichtern, da solche Typen eben wirklich universell einsetzbar sind.

Wenn man von Anfang an mit solchen semantischen Typen arbeitet, würde sich eine Frage nach den überladenen Konstruktoren in der Weise gar nicht stellen (weil z.B. ein Volumen eben keine Dichte ist).

Viele Grüße
MarsStein

Thema: Überladung von Konstruktoren mit quasi gleicher Signatur
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Hallo,

Zitat
mit eigenen Parameter-Typen zu arbeiten, welche dann auch ihre eigenen Fehler habe können und eigene Unit-Tests haben sollten
Würde ich so sehen.
Wenn Du das Spielchen mit den Einheiten machen willst, gibt es im Prinzip auch was für Unit Tests.
Wenn Du das nicht brauchst (immer in den gleichen Einheiten rechnest), reichst Du ja nur einen Wert weiter, da würden sich UnitTests damm IMO nicht wirklich lohnen.

Ob das der "beste" Weg ist sei mal dahingestellt, das muss jeder für sich selbst entscheiden. Es ist aber auf jeden Fall das, was ich persönlich dafür halte ;)

Gruß, MarsStein

Thema: Überladung von Konstruktoren mit quasi gleicher Signatur
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Hallo,

sorry, meine Edits haben sich da mit Deinem Post überschnitten.
NumericField habe ich rausgenommen (hatte zuerst eine Basisklasse gemacht, dachte dann aber, structs seien hier besser.
Zu sealed-Datentypen: Die structs von mir sind ja auch sealed... verhält sich genauso. Du baust ja eine Struktur, die den eigentlichen Wert wrappt, da ist es Dir egal ob sealed oder nicht.

Gruß, MarsStein

Thema: Überladung von Konstruktoren mit quasi gleicher Signatur
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Hallo,

also ich würde hier definitiv einzelne Datentypen bauen die die unterschiedliche Semantik abbilden.
Das eine ist nun mal ein Gewicht, das andere ein Volumen, und nur weil beide numerisch gemessen werden, sind sie noch lange nciht dasselbe -> warum dann also dem Code alles als double unterjubeln?

Im folgenden Beispiel gibt es eigene Typen für Gewicht, Volumen und Dichte. Die sind dann vollständig flexibel kombinierbar im Konstruktor, und biten zudem die Möglichkeit, sehr leicht mit unterschiedlichen Einheiten umzugehen (ich habe das beispielhaft beim Volumen mal gemacht).

Solche Typen sind dann im Gegensatz zu zusammengesetzten Initialisierungsobjekten auch völlig universell einsetzbar.

public class Koerper
{
    #region privates
    Volumen volumen;
    Gewicht gewicht;
    Dichte dichte;
    #endregion
    #region Constructors

    public Koerper()
    {

    }

    public Koerper(Dichte d, Volumen v)
    {
        dichte = d;
        volumen = v;
    }

    public Koerper(Gewicht g, Volumen v)
    {
        gewicht = g;
        volumen = v;
    }

    public Koerper(Dichte d, Gewicht g)
    {
        dichte = d;
        gewicht = g;
    }
    #endregion
}

public struct Dichte
{
    double _value;
    public Dichte(double val)
    {
        _value = val;
    }
    // hier noch Factory- und Zugriffsmethoden (siehe Volumen)
}

public struct Gewicht
{
    double _value;
    public Gewicht(double val)
    {
        _value = val;
    }
    // hier noch Factory- und Zugriffsmethoden (siehe Volumen)
}

public struct Volumen
{
    double _value;
    public Volumen(double val)
    {
        _value = val;
    }

    // Factorymethoden um aus verschiedenen Einheiten zu erzeugen
    public Volumen FromKubikzentimeter(double val)
    {
        return new Volumen(val / 1000000);
    }


    public Volumen FromLiter(double val)
    {
        return new Volumen(val / 1000);
    }


    public Volumen FromKubikmeter(double val)
    {
        return new Volumen(val);
    }

    // Zugriff über verschiedene Einheiten
    public double Kubikzentimeter { get { return _value * 1000000; } }

    public double Liter { get { return _value * 1000; } }

    public double Kubikmeter { get { return _value; } }

}

Gruß, MarsStein

Edit: da war noch ein Fehler im Code...
und noch einer... die Factory-Methoden in Volumen hatten gar keine neuen Objekte erzeugt :( -> korrigiert

Thema: Warum sind Administratoren/Moderatoren (mit einer Ausnahme) die selben Leute?
Am im Forum: Smalltalk

Hallo,

das liegt daran, dass ein Admin generell auch Moderationsberechtigungen hat (und diese für gewöhnlich auch wahrnimmt).
Zusätzlich gibt es dann noch einige Moderatoren, die aber nicht über Admin-Rechte verfügen.

Gruß, MarsStein

Edit: typos