Heim Backend-Entwicklung C#.Net-Tutorial Detaillierte Einführung in die generische C#-Parameterkonvertierung

Detaillierte Einführung in die generische C#-Parameterkonvertierung

Mar 07, 2017 am 11:03 AM

In diesem Artikel werden die relevanten Kenntnisse der generischen C#-Parameterkonvertierung vorgestellt, die einen guten Referenzwert haben.

Die von verschiedenen Parametertypen generierten Objekte sind unabhängig gegenseitig.

//如
Tuple<string> ts;
Tuple<object> to;
//ts to 是两个类型的对象。
Nach dem Login kopieren

Oft möchten wir den to = ts-Vorgang implementieren, warum? Weil es so aussieht, als ob es so sein sollte.

Um dieses Ziel zu erreichen, ist es notwendig, das „Problem der generischen Parameterkonvertierung“ zu lösen. Der Wissenspunkt dieses Problems ist die generische In-Out-Variante. Um ehrlich zu sein, ist das Problem an sich nicht schwierig, es ist nur sehr unintuitiv und man vergisst es leicht.

Um to = ts zu realisieren, gibt es zunächst tatsächlich eine Voraussetzung, das heißt, dieser Parameter kann nur für den „Rückgabetyp“ verwendet werden.

//如
delegate object FuncObj();
FuncObj func = ()=>"string";
Nach dem Login kopieren

Der Grund, warum func erfolgreich ist, liegt darin, dass ein String in ein Objekt konvertiert werden kann. Wenn der „Benutzer“ func aufruft, hofft er, das Objektobjekt zu erhalten, und die Zeichenfolge ist ebenfalls ein Objektobjekt, sodass kein Problem besteht.

Der Schlüssel hier liegt darin, zu lernen, Probleme aus der „Benutzer“-Perspektive zu analysieren.

//A
delegate void FuncObj2(object obj);
FuncObj2 func2 = (string str)=>{};
//B
delegate void FuncStr(string str);
FuncStr func3 = (object obj)=>{};
Nach dem Login kopieren

Analysieren Sie diese beiden Codesätze. Welcher ist sinnvoller?

Aus Sicht des Benutzers werden func2 und func3 verwendet

Wenn der Benutzer func2 verwendet, muss das übergebene Objekt ein Objekt sein, aber die tatsächlich verarbeitete Funktion ist (string)=> {}, das Objekt kann nicht in eine Zeichenfolge konvertiert werden, daher ist dies sehr unvernünftig.

Wenn Benutzer func3 verwenden, kann das übergebene Objekt nur ein String sein, aber die tatsächlich verarbeitete Funktion ist (object)=>{} und kann in ein Objekt konvertiert werden, was sinnvoll ist.

Natürlich sind diese beiden Codesätze nicht gültig, da die Funktionsparametertypen nicht übereinstimmen.

Generika bieten jedoch eine Methode zur impliziten Konvertierung von Objekten mit nicht übereinstimmenden Typen! Die implementierte Logik wird oben analysiert.

//out 修饰返回类型
delegate ResultType FuncOut<out ResultType>();
//in 修饰参数类型
delegate void FuncIn<in ParamType>(ParamType param);
//这是一开始我们想做到的目标
FuncOut<object> fun4 = () => "string";
//这个效果恰好相反
FuncIn<object> funcobj = (object obj) => { };
FuncIn<string> fun5 = funcobj;
//注意,泛型变体一般只能和泛型变体之间隐式转换
//lambda表达式会自动转换成参数相同的泛型变体,但无法接着做变体之间的隐式转换,所以需要funcobj来过渡
Nach dem Login kopieren

out ändert den Rückgabetyp und in ändert den Parametertyp, was ziemlich anschaulich ist, aber achten Sie auf den generischen in-Parameter, der ist genau das Gegenteil des Out-Parameters.

Zuerst wollten wir to = ts implementieren, aber wir sahen nur die Hälfte des Problems. Tatsächlich besteht die Möglichkeit von ts = to in Generika. Ich hoffe, die Leser können dies verstehen.

Zusammenfassung:

out : to = ts;
in : ts = to;
Nach dem Login kopieren

Keine Änderung: bis, ts sind völlig unabhängig.

----------- (Bemerkungen)------------- -- -
out-Parameter: kann nur in Rückgabetypen verwendet werden.

in Parameter: Kann nur in Parametern verwendet werden.

Keine Änderung: jede Position.

-----------(Hinweis 2)------------- - -----------------

Generische In- und Out-Parameter können nur für Delegaten und Schnittstellen verwendet werden.

//综合运用
delegate ResultType FuncInOut<in ParamType, out ResultType>(ParamType param);
FuncInOut<object, string> funcobj2 = (object obj) => "string";  
FuncInOut<string, object> func6 = funcobj2;
Nach dem Login kopieren

Das Obige ist die detaillierte Einführung in die generische C#-Parameterkonvertierung. Weitere verwandte Inhalte finden Sie auf der chinesischen PHP-Website (www.php.cn).



Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
2 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
Repo: Wie man Teamkollegen wiederbelebt
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Abenteuer: Wie man riesige Samen bekommt
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Active Directory mit C# Active Directory mit C# Sep 03, 2024 pm 03:33 PM

Leitfaden zu Active Directory mit C#. Hier besprechen wir die Einführung und die Funktionsweise von Active Directory in C# sowie die Syntax und das Beispiel.

Zugriffsmodifikatoren in C# Zugriffsmodifikatoren in C# Sep 03, 2024 pm 03:24 PM

Leitfaden zu den Zugriffsmodifikatoren in C#. Wir haben die Einführungstypen von Zugriffsmodifikatoren in C# zusammen mit Beispielen und Ausgaben besprochen.

Zufallszahlengenerator in C# Zufallszahlengenerator in C# Sep 03, 2024 pm 03:34 PM

Leitfaden zum Zufallszahlengenerator in C#. Hier besprechen wir die Funktionsweise des Zufallszahlengenerators, das Konzept von Pseudozufallszahlen und sicheren Zahlen.

C#-Datenrasteransicht C#-Datenrasteransicht Sep 03, 2024 pm 03:32 PM

Leitfaden zur C#-Datenrasteransicht. Hier diskutieren wir die Beispiele, wie eine Datenrasteransicht aus der SQL-Datenbank oder einer Excel-Datei geladen und exportiert werden kann.

C# StringReader C# StringReader Sep 03, 2024 pm 03:23 PM

Leitfaden für C# StringReader. Hier besprechen wir einen kurzen Überblick über C# StringReader und seine Funktionsweise zusammen mit verschiedenen Beispielen und Code.

Muster in C# Muster in C# Sep 03, 2024 pm 03:33 PM

Leitfaden zu Mustern in C#. Hier besprechen wir die Einführung und die drei wichtigsten Arten von Mustern in C# zusammen mit ihren Beispielen und der Code-Implementierung.

C#-Serialisierung C#-Serialisierung Sep 03, 2024 pm 03:30 PM

Leitfaden zur C#-Serialisierung. Hier besprechen wir die Einführung, die Schritte des C#-Serialisierungsobjekts, die Funktionsweise bzw. das Beispiel.

C# StringWriter C# StringWriter Sep 03, 2024 pm 03:23 PM

Leitfaden für C# StringWriter. Hier besprechen wir einen kurzen Überblick über die C#-StringWriter-Klasse und ihre Funktionsweise zusammen mit verschiedenen Beispielen und Codes.

See all articles