Der gebräuchlichste Ansatz besteht darin, die Schnittstelle und eine abstrakte Barebones-Klasse zu deklarieren, die sie implementiert. Dies ermöglicht Ihnen die Flexibilität, entweder von der abstrakten Klasse zu erben und die Implementierung kostenlos zu erhalten oder die Schnittstelle explizit zu implementieren und von einer anderen Klasse zu erben. Es funktioniert ungefähr so: public interface IMyInterface
int MyProperty { get; set;}}
public abstract class MyInterfaceBase: IMyInterface
int myProperty;
public int MyProperty
get { return myProperty;}
set { myProperty = value;}}}
Eine Schnittstelle definiert öffentliche Instanzeigenschaften und -methoden. Felder sind in der Regel privat oder am besten geschützt, intern oder geschützt intern (der Begriff "Feld" wird normalerweise für nichts öffentliches verwendet). Wie in anderen Antworten angegeben, können Sie eine Basisklasse definieren und eine geschützte Eigenschaft definieren, auf die alle Erben zugreifen können. C# interface deutsch. Eine Besonderheit ist, dass eine Schnittstelle tatsächlich als intern definiert werden kann, aber sie begrenzt die Nützlichkeit der Schnittstelle und wird normalerweise verwendet, um interne Funktionalität zu definieren, die nicht von anderem externen Code verwendet wird.
C# Interface Deutsch
Specification colorSpec = new ColorSpecification ();
Specification lengthSpec = new LengthSpecification ();
if ( colorSpec. and ( lengthSpec). isSatisfiedBy ( obj)) {... }
Im oberen Beispiel steht in der Bedingung der if-Anweisung ganz ausdrücklich, dass das Objekt obj auf beide Bedingungen getestet wird. Ein weiteres Beispiel ist das sprechende Erstellen eines Datums. DateFactory. newDate (). Grafische Benutzeroberflächen für C# erstellen. year ( 2009). month ( 2). day ( 7);
Anders als bei der Verwendung eines Konstruktors, in dem die Bedeutung der drei numerischen Werte versteckt durch ihre Position im Aufruf gegeben wäre, sieht man hier durch die vorstehenden Methodennamen ausdrücklich, welche Bedeutung die einzelnen Werte haben sollen. Außerdem kann der Entwickler einer solchen Schnittstelle die Reihenfolge einschränken, in der die Methoden aufgerufen werden dürfen. Damit können etwa Methodenaufrufe, die mehrere Parameter erwarten, wesentlich verständlicher geschrieben werden. Besonders in Evans' Domain-driven Design spielen Fluent Interfaces eine große Rolle, denn sie dienen ihm dazu, spezifische Eigenschaften aus einer Domäne explizit im Programmcode auszudrücken.
Auch bei der Parameterübergabe unterscheiden sie sich nicht großartig. Standardmäßig wird auch in C# by-value übergeben, bei Werttypen werden die Werte kopiert, bei Referenztypen die Referenzen. Allerdings bietet C# auch noch die Möglichkeit call-by-reference zu erzwingen. C# Interface - So geht's - C# Hilfe. Dazu gibt es die Schlüsselwörter ref und out. call-by-value in C#
public void swapContent(ref int a, ref int b)
Durch das Schlüsselwort ref wird bei der Parameterübergabe call-by-reference erzwungen und Änderungen an den Parametern wirken sich auch auf die ursprünglichen Werte aus. Fazit
Der Unterschied zwischen call-by-value und call-by-reference kann den Programmverlauf deutlich beeinflussen. Damit du gute Programme schreiben kannst, solltest du dir also immer im Klaren sein, was bei einem Funktionsaufruf mit deinen Parametern genau passiert. Am besten öffnest du gleich die Entwicklungsumgebung deiner Wahl und probierst die verschiedenen Möglichkeiten im Debugger aus. FAQ: Häufige Fragen zu Call-by-Value und Call-by-Reference
Was ist der Unterschied zwischen Call-by-Value und Call-by-Reference?