Folgende Warnungen sind aufgetreten:
Warning [2] unserialize(): Error at offset 2711 of 2829 bytes - Line: 2627 - File: inc/functions.php PHP 8.3.6 (Linux)
File Line Function
/inc/class_error.php 153 errorHandler->error
[PHP] errorHandler->error_callback
/inc/functions.php 2627 unserialize
/inc/class_datacache.php 138 native_unserialize
/inc/init.php 182 datacache->cache
/global.php 20 require_once
/showthread.php 28 require_once
Warning [2] unserialize(): Error at offset 1195 of 1968 bytes - Line: 2627 - File: inc/functions.php PHP 8.3.6 (Linux)
File Line Function
/inc/class_error.php 153 errorHandler->error
[PHP] errorHandler->error_callback
/inc/functions.php 2627 unserialize
/inc/class_datacache.php 138 native_unserialize
/inc/init.php 182 datacache->cache
/global.php 20 require_once
/showthread.php 28 require_once




Themabewertung:
  • 0 Bewertung(en) - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
Programmieren
#17
Ein Interface ist in C# was ganz anderes. Da ist das eine, ich sag mal extrem abgespeckte Klasse.
Sie enthält keinen Programm-Code, nur die Methoden, Konstruktoren, Eigenschaften und Attribut und stellt damit sicher, dass eine Klasse, die von diesem Interface erbt, auch ganz sicher diese Elemente enthält.

das hängt jetzt wieder mit der Polimorphie zusammen, deshalb erkläre ich das jetzt nicht ausführlich.



Also Delegaten-Beispiel:

Code:
namespace Namensraum
{
    public delegate double CalculateHandler(double FirstNumber, double SecondNumber);

    static class Rechnen
    {
        static void Main()
        {
            CalculateHandler calculate = new CalculateHandler(Plus);

            double Ergebnis = calculate(5, 7);

            Console.WriteLine(Ergebnis);
            Console.Read();
        }


        static double Plus(double Summand1, double Summand2)
        {
            return Summand1 + Summand2;
        }
    }
}

Es muss zu erst ein MethodenHandler als Typ definiert werden. Da sind auch alle nötigen Infos drin, nämlich Rückgabewert und die Parameter.
Dann kannst du ganz normal eine Variable vom Typ des Delegaten machen und diese Variable dann wie eine Methode aufrufen.

Damit werden meistens Events gelöst, das heißt, es wird in einer Klasse ein Event (Ereignis) ausgelöst. Die Variable des entsprechenden Delegaten wird also auf gerufen. Wenn der Nutzer eine Methode darin gekapselt hat, wird die ausgeführt. Wenn nicht, passiert gar nichts. Das gibt dem Nutzer die Möglichkeit, auf bestimmte Dinge direkt reagieren zu können und die Forms-Programmierung (Windows-Fenster) wäre ohne Events gar nicht möglich, da jeder Mucks mit einem Event bearbeitet werden kann, oder einfach nur ein Button-Click.



Hab aber noch was interessanteres:
Man kann ja Methoden überladen. Einfach zwei Methoden mit dem selben Namen, aber unterschiedlichen Parametern. Sie wird dann nur einmal aufgeführt, akzeptiert aber verschiedene Kombinationen von Parametern.
Das geht auch mit Operatoren.
Der Operator == gibt ja zurück, ob zwei Werte/Referenzen gleich sind, oder nicht.
Man kann diesen Operator auch überschreiben und dann z.B. genau sagen, wie die beiden Werte/Referenzen gleich sind.
Bei Werten wäre das sinnlos, aber da zwei verschiedene Referenzen niemals gleich sind, aber gleiche Eigenschaften haben können, könnte man spezielle Eigenschaften von dem ==-Operator vergleichen lassen und bekommt das richtige Ergebnis.
Zur Erklärung des Beispiels oben:

Das Programm beginnt immer bei Main.
Und "Console" ist die Klasse, die die einfache Windows-Konsole darstellt. WriteLine schreibt ne Zeile und Read liest ein Zeichen, allerdings nutze ich es hier nur zum Warten.


Hier mal ein Beispiel, wie ich den Operator + überlade:

Code:
public class Werte
    {
        public double Wert { get; set; }

        public Werte(double Wert)
        {
            this.Wert = Wert;
        }

        public static double operator +(Werte Wert1, Werte Wert2)
        {
            return Wert1.Wert + Wert2.Wert;
        }
    }

    public class Rechnen
    {
        static void Main()
        {
            Werte w1 = new Werte(5);
            Werte w2 = new Werte(7);

            Console.WriteLine(w1 + w2);

            Console.Read();
        }
    }

Wenn ich in der Klasse Werte die Operator-Überladung weg gelassen hätte, würde ich einen Fehler in der Main-Methode bekommen, da man zwei Referenzen nicht addieren kann.

Das Thema ist recht besucht, kein Grund also, nach 4 Stunden einen Doppelpost zu machen Zwinker // Acuros
Pessimisten sind realistisch.
Optimisten sind glücklich.

Programmieren ist einfach, jeder kann es lernen.
Doch gut programmieren, das ist die Kunst.
Zitieren


Nachrichten in diesem Thema
Programmieren - von Brandwunde - 05.06.2012, 17:48
RE: Java - von era - 05.06.2012, 23:26
RE: Java - von Palladin007 - 06.06.2012, 01:36
RE: Java - von Brandwunde - 06.06.2012, 15:40
RE: Java - von Palladin007 - 06.06.2012, 17:10
RE: Java - von Exitus - 06.06.2012, 18:26
RE: Java - von era - 06.06.2012, 19:23
RE: Java - von Palladin007 - 06.06.2012, 20:36
RE: Java - von DJ Modulo - 06.06.2012, 21:34
RE: Java - von Palladin007 - 06.06.2012, 21:58
RE: Java - von era - 06.06.2012, 22:45
RE: Java - von Brandwunde - 06.06.2012, 23:01
RE: Programmieren - von Palladin007 - 06.06.2012, 23:21
RE: Programmieren - von Brandwunde - 06.06.2012, 23:45
RE: Programmieren - von Palladin007 - 07.06.2012, 00:05
RE: Programmieren - von Brandwunde - 07.06.2012, 12:02
RE: Programmieren - von Palladin007 - 07.06.2012, 17:49

Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 3 Gast/Gäste