1. dynamischesExpandoObject
Freunde, die mit js vertraut sind, wissen, dass js so geschrieben werden kann:
view sourceprint?1 var t = new Object();
2 t.Abc = 'etwas';
3t.Wert = 243;
Jetzt können wir diese Funktion der dynamischen js-Sprache auch in c# verwenden, vorausgesetzt, eine Variable ist als ExpandoObject-Typ deklariert. Zum Beispiel:
view sourceprint?1 static void Main(string[] args)
2 {
3 dynamisch t = new ExpandoObject();
4 t.Abc = "abc";
5t.Wert = 10000;
6 Console.WriteLine("t's abc = {0},t's value = {1}", t.Abc, t.Value);
7 Console.ReadLine();
8}
In C# 4.0 wurde ein neuer Namespace hinzugefügt, um diese Anwendung zu unterstützen. Ich bin mir nicht sicher, welche Bedeutung diese Verwendung hat. Es handelt sich auch um einen Versuch des Übergangs von C# zu einer dynamischen Sprache.
2. Generische automatische Konvertierung
Vor C# 4.0 konnte der folgende Code nicht kompiliert werden.
view sourceprint?1 IEnumerable<object> objs = new List<string> {
2 „Ich bin 0“, „Ich bin 1“, „Ich bin 2“
3};
In C# 4.0 ist diese Art der Deklaration jedoch zulässig, jedoch auf generische Schnittstellen beschränkt. Ähnliche Methoden für generische Typen sind nicht zulässig. Der folgende Code weist einen Kompilierungsfehler auf.
view sourceprint?1 List<object> objList = new List<string> {
2 „Ich bin 0“, „Ich bin 1“, „Ich bin 2“
3};
3. Die optionalen Parameter von Methodenparametern lauten wie folgt: die Syntax der Methodendeklaration
view sourceprint?1 static void DoSomething(int notOptionalArg,string arg1 = "default Arg1", string arg2 = "default arg2") {
2 Console.WriteLine("arg1 = {0},arg2 = {1}",arg1,arg2);
3}
Diese Methode verfügt über drei Parameter. Der erste ist ein erforderlicher Parameter, der zweite und der dritte sind optionale Parameter und alle haben einen Standardwert. Dieses Formular ist für verschiedene Methodenüberladungen mit festen Parametern nützlich.
Wird wie folgt aufgerufen:
view sourceprint?1 static void Main(string[] args)
2 {
3 DoSomething(1);
4 DoSomething(1, „Kürbis“);
5 DoSomething(1, „Gourd“, „Cucumber“);
6 Console.ReadLine();
7}
Vielleicht denken Sie: Wenn ich eine Methode mit derselben Methodensignatur wie eine optionale Parametermethode habe, ohne einen Parameter auszuwählen, wie wird C# damit umgehen? Schauen wir uns den folgenden Code an
view sourceprint?1 static void DoSomething(int notOpArg, string arg)
2 {
3 Console.WriteLine("arg1 = {0}", arg);
4}
Ich habe eine andere DoSomething-Methode überladen, aber es gibt keine optionalen Parameter
Bei DoSomething(1,"arg") werden zuerst Methoden ohne optionale Parameter ausgeführt.
4. Benannte Parameter von Methodenparametern Mit benannten Parametern können wir Parameterwerte zuweisen, indem wir beim Aufruf der Methode Parameternamen angeben. In diesem Fall kann die Reihenfolge der Parameter ignoriert werden. Die folgende Methodendeklaration:
view sourceprint?1 static void DoSomething(int height, int width, string openerName, string scroll) {
2 Console.WriteLine("height = {0},width = {1},openerName = {2}, scroll = {3}",height,width,openerName,scroll);
3}
Wir können die oben deklarierte Methode so aufrufen
view sourceprint?1 static void Main(string[] args)
2 {
3 DoSomething( scroll: „no“,height: 10, width: 5, openerName: „windowname“);
4 Console.ReadLine();
5}
Offensichtlich ist das syntaktischer Zucker, aber es ist sinnvoll, wenn viele Methodenparameter vorhanden sind, und kann die Lesbarkeit des Codes verbessern.
http://www.cnblogs.com/yukaizhao/archive/2010/05/24/csharp-40-dynamic-optional-argument.html