Heim >Backend-Entwicklung >C#.Net-Tutorial >C# Advanced Programming Kapitel 12 Dynamische Spracherweiterung
(1) DLR
Die dynamische Funktion von C#4 ist Dynamische SpracheSprachlaufzeit(Dynamische Sprachlaufzeit, Teil von DLR). DLR ist eine Reihe von Diensten, die zu CLR hinzugefügt werden.
(2) dynamischer Typ
dynamischerTyp zulässig Schreiben Sie Code, der die Typprüfung während der Kompilierung ignoriert. Der Compiler geht davon aus, dass jede Operation, die für ein Objekt vom Typ dynamisch definiert ist, gültig ist, und der Compiler prüft vor der Ausführung nicht auf Fehler.
Beispiel:dynamic person = "人";string firstName = person.FirstName;
Diese beiden Codezeilen können vom Compiler kompiliert werden, es wird jedoch ein Fehler gemeldet nach dem Klicken auf „Ausführen“:
Es sollte beachtet werden, dass der Typ dynamisch zwar nützlich ist, aber hat seinen Preis.
(3) Enthält DLR ScriptRuntime
zum Hinzufügen von Skripten zum Anwendungsbearbeitungsfunktionen und die Übergabe von Werten an und von Skripten ermöglichen es Anwendungen, Skripte zu verwenden, um ihre Arbeit abzuschließen.(4) DynamicObject und ExpandoObject
von Sie können Ihre eigenen dynamischen Objekte erstellen, indem Sie DynamicObject ableiten oder ExpandoObject verwenden.
Die Verwendung der DynamicObject-Ableitung zum Erstellen dynamischer Objekte erfordert das Überschreiben von drei Methoden: TrySetMembe(), TryGetMember() und TryInvokeMember().
Der Unterschied zwischen der Verwendung von ExpandoObject und DynamicObject zum Ableiten besteht darin, dass Methoden nicht überschrieben werden müssen.
Beispiel:class Program { static void Main(string[] args) { Func<string, string, string> getFullName = (f, l) => { return f + " " + l; }; dynamic byexobj = new ExpandoObject(); byexobj.FirstName = "李"; byexobj.LastName = "四"; byexobj.GetFullName = getFullName; Console.WriteLine(byexobj.GetType()); Console.WriteLine(byexobj.GetFullName(byexobj.FirstName, byexobj.LastName)); Console.WriteLine("====================="); dynamic dyobj = new MyDynamicObject(); dyobj.FirstName = "张"; dyobj.LastName = "三"; dyobj.GetFullName = getFullName; Console.WriteLine(dyobj.GetType()); Console.WriteLine(dyobj.GetFullName(dyobj.FirstName, dyobj.LastName)); Console.ReadKey(); } } public class MyDynamicObject : DynamicObject { Dictionary<string, object> dynamicData = new Dictionary<string, object>(); public override bool TrySetMember(SetMemberBinder binder, object value) { dynamicData[binder.Name] = value; return true; } public override bool TryGetMember(GetMemberBinder binder, out object result) { bool success = false; result = null; if (dynamicData.ContainsKey(binder.Name)) { result = dynamicData[binder.Name]; success = true; } else { result = "未找到该属性的值"; success = false; } return success; } public override bool TryInvokeMember(InvokeMemberBinder binder, object[] args, out object result) { dynamic method = dynamicData[binder.Name]; result = method((string)args[0],(string)args[1]); return result != null; } }
Führen Sie den obigen Code aus. Das Ergebnis ist wie folgt:
Das obige ist der detaillierte Inhalt vonC# Advanced Programming Kapitel 12 Dynamische Spracherweiterung. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!