{"id":28264,"date":"2019-09-18T00:00:00","date_gmt":"2019-09-17T22:00:00","guid":{"rendered":"https:\/\/blexin.com\/?p=28264"},"modified":"2021-01-13T09:40:27","modified_gmt":"2021-01-13T08:40:27","slug":"migliora-il-tuo-codice-con-la-reflection","status":"publish","type":"post","link":"https:\/\/blexin.com\/it\/blog\/migliora-il-tuo-codice-con-la-reflection\/","title":{"rendered":"Migliora il tuo codice con la Reflection"},"content":{"rendered":"\n<figure class=\"wp-block-image size-large\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"608\" data-attachment-id=\"28265\" data-permalink=\"https:\/\/blexin.com\/it\/blog\/migliora-il-tuo-codice-con-la-reflection\/attachment\/f7b025a6-cd86-4360-afdc-4a63c29a3ad6\/\" data-orig-file=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/f7b025a6-cd86-4360-afdc-4a63c29a3ad6.png?fit=1024%2C608&amp;ssl=1\" data-orig-size=\"1024,608\" data-comments-opened=\"0\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"f7b025a6-cd86-4360-afdc-4a63c29a3ad6\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/f7b025a6-cd86-4360-afdc-4a63c29a3ad6.png?fit=1024%2C608&amp;ssl=1\" src=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/f7b025a6-cd86-4360-afdc-4a63c29a3ad6.png?resize=1024%2C608&#038;ssl=1\" alt=\"\" class=\"wp-image-28265\" srcset=\"https:\/\/blexin.com\/wp-content\/uploads\/2020\/12\/f7b025a6-cd86-4360-afdc-4a63c29a3ad6.png 1024w, https:\/\/blexin.com\/wp-content\/uploads\/2020\/12\/f7b025a6-cd86-4360-afdc-4a63c29a3ad6-980x582.png 980w, https:\/\/blexin.com\/wp-content\/uploads\/2020\/12\/f7b025a6-cd86-4360-afdc-4a63c29a3ad6-480x285.png 480w\" sizes=\"auto, (min-width: 0px) and (max-width: 480px) 480px, (min-width: 481px) and (max-width: 980px) 980px, (min-width: 981px) 1024px, 100vw\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">La reflection \u00e8 una funzionalit\u00e0 del .NET Framework che ci permette di ispezionare e manipolare a runtime i metadati e il codice compilato in un assembly .NET. \u00c8 una feature estremamente potente, ma, come tutti gli strumenti a nostra disposizione, bisogna capire come funziona per poterla usare nel migliore dei modi.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Gli assembly forniscono al Common Language Runtime le informazioni necessarie per riconoscere le implementazioni dei tipi. Un assembly pu\u00f2 essere considerato come una raccolta di tipi e risorse che formano&nbsp;un&#8217;unit\u00e0 logica di funzionalit\u00e0 e che sono creati per interagire. Sono costituiti da una o pi\u00f9 unit\u00e0 indipendenti chiamate Moduli. Le informazioni di nostro interesse sono contenute nel modulo principale e sono le seguenti:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>l\u2019Assembly Manifest, che a sua volta contiene il nome dell\u2019Assembly, la versione e un catalogo di tutti i moduli contenuti al suo interno;<\/li><li>I Metadati, che contengono una descrizione completa di tutti i tipi esposti, compresi metodi, campi, parametri e costruttori, eventuali riferimenti ad assembly esterni e l\u2019IL (Intermediate Language) che \u00e8 stato compilato dal codice sorgente ed \u00e8 l\u2019effettiva parte eseguibile dell\u2019assembly.<\/li><\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Un assembly, precedentemente compilato in IL (Intermediate Language), viene compilato in linguaggio macchina dal compilatore JIT (Just in Time Compiler), detto anche&nbsp;<strong>JITter<\/strong>. Il codice nativo viene prodotto quando richiesto cio\u00e8, ad esempio, alla prima invocazione di un metodo esso viene compilato e conservato in memoria. Alle successive chiamate, sar\u00e0 gi\u00e0 disponibile in cache e di conseguenza sar\u00e0 risparmiato il tempo di compilazione. Se non sono usati, gli assembly non vengono caricati. Questo significa che rappresentano un modo efficace per gestire le risorse nei progetti di maggiori dimensioni. Il vantaggio della&nbsp;<strong>compilazione JIT<\/strong>&nbsp;\u00e8 che pu\u00f2 essere realizzata dinamicamente in modo da trarre vantaggio dalle caratteristiche del sistema sottostante.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Attraverso l\u2019utilizzo dei Metadati, possiamo creare dinamicamente istanze di tipi, invocare metodi, ottenere ed impostare i valori di propriet\u00e0 e campi, o ispezionare attributi.<br>C# ci offre classi e metodi per eseguire queste e molte altre cose, utilizzando quella che viene chiamata Reflection.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Le classi, che ci interessano maggiormente per l\u2019utilizzo della Reflection, sono tre:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><em>Classe Type<\/em><br>La classe Type \u00e8 una classe astratta che utilizzeremo per accedere ai metadati attraverso le classi della Reflection. Utilizzando un oggetto&nbsp;<strong>Type<\/strong>&nbsp;\u00e8 possibile ottenere informazioni relative a costruttori, metodi, campi, propriet\u00e0 ed eventi di una classe.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><em>Classe Activator<\/em><br>Questa classe contiene metodi che possono essere utilizzati per creare dinamicamente un\u2019istanza di un tipo.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><em>Classe Assembly<\/em><br>Questa classe astratta ci permette di caricare, manipolare, ottenere informazioni su un assembly e individuare tutti i tipi in esso contenuti.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Vediamo un piccolo esempio pratico, utilizzando la Reflection e gli attributi personalizzati per mappare le propriet\u00e0 degli oggetti.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Nonostante Entity Framework e il namespace&nbsp;<em>System.ComponentModel.DataAnnotations<\/em>&nbsp;ci forniscono gi\u00e0 strumenti per poterlo fare, potremmo aver bisogno di costruire il nostro livello o strumento di accesso ai dati.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Potremmo implementare la nostra versione di queste annotazioni di dati come Attributi Personalizzati. Per creare un attributo personalizzato in C#, creiamo semplicemente una classe che eredita da&nbsp;<em>System.Attribute<\/em>. Ad esempio, se volessimo implementare un nostro attributo [<strong>PrimaryKey<\/strong>] per indicare che una particolare propriet\u00e0 su una classe nella nostra applicazione rappresenta la chiave primaria nel nostro database, potremmo creare il seguente attributo personalizzato:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: csharp; title: ; notranslate\" title=\"\">\npublic class PrimaryKeyAttribute : Attribute { }\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">Gli attributi possono anche trasmettere informazioni, se necessario. Consideriamo un modo per mappare la propriet\u00e0 su uno specifico nome di colonna del database.<br>Creiamo una classe che eredita da&nbsp;<em>System.Attribute<\/em>, ma questa volta aggiungiamo una propriet\u00e0 e un costruttore:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: csharp; title: ; notranslate\" title=\"\">\npublic class DbColumnAttribute : Attribute\n{\n\u00a0\u00a0\u00a0\u00a0public string Name { get; set; }\n\u00a0\u00a0\u00a0\u00a0public DbColumnAttribute(string name)\n\u00a0\u00a0\u00a0\u00a0{\n\u00a0\u00a0\u00a0\u00a0\u00a0this.Name = name;\n\u00a0\u00a0\u00a0\u00a0}\n}\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">Ora, supponiamo di ereditare un database che dobbiamo integrare con il nostro codice esistente. La tabella da cui verranno ricavate le informazioni sul client utilizza tutti i nomi delle colonne minuscole e separate da un underscore, per meglio comprendere il contesto. Di seguito, il codice SQL della creazione della tabella in questione:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: csharp; title: ; notranslate\" title=\"\">\nCREATE TABLE Users (\n\u00a0\u00a0\u00a0\u00a0id_user int IDENTITY(1,1) PRIMARY KEY NOT NULL,\n\u00a0\u00a0\u00a0\u00a0first_name varchar(50) NOT NULL,\n\u00a0\u00a0\u00a0\u00a0last_name varchar(50) NOT NULL,\n\u00a0\u00a0\u00a0\u00a0email varchar(50) NOT NULL\n);\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">Ed ecco come apparir\u00e0 la nostra classe Utente con gli attributi di nome colonna:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: csharp; title: ; notranslate\" title=\"\">\npublic class User\n{\u00a0\u00a0\u00a0 \n\u00a0\u00a0\u00a0\u00a0&#x5B;PrimaryKey]\n\u00a0\u00a0\u00a0\u00a0&#x5B;DbColumn(&quot;id_user&quot;)]\n\u00a0\u00a0\u00a0\u00a0public int UserId { get; set; }\n\u00a0\u00a0\n\u00a0\u00a0\u00a0\u00a0&#x5B;DbColumn(&quot;first_name&quot;)]\n\u00a0\u00a0\u00a0\u00a0public string Name { get; set; }\n\u00a0\u00a0\n\u00a0\u00a0\u00a0\u00a0&#x5B;DbColumn(&quot;last_name&quot;)]\n\u00a0\u00a0\u00a0\u00a0public string Surname { get; set; }\n\u00a0\u00a0\n\u00a0\u00a0\u00a0\u00a0&#x5B;DbColumn(&quot;email&quot;)]\n\u00a0\u00a0\u00a0\u00a0public string Email { get; set; }\n}\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">Potremmo ora scrivere un metodo che ci permetta, utilizzando la Reflection, di mappare le propriet\u00e0 della nostra classe sullo specifico nome di colonna del database:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: csharp; title: ; notranslate\" title=\"\">\nstatic void DbColumnsMappingMethod&lt;T&gt; (T obj) where T : new()\n{\n\u00a0\u00a0\u00a0\u00a0\/\/ Get the istance&#039;s Type object\n\u00a0\u00a0\u00a0\u00a0Type type = obj.GetType();\n\u00a0\u00a0\n\u00a0\u00a0\u00a0\u00a0\/\/ Get a list of the public properties of the Type object as PropertyInfo objects\n\u00a0\u00a0\u00a0\u00a0PropertyInfo&#x5B;] objectPropertiesList = type.GetProperties();\n\u00a0\u00a0\n\u00a0\u00a0\u00a0\u00a0Console.WriteLine(&quot;Search properties for the object: {0}&quot;, type.Name);\n\u00a0\u00a0\u00a0\u00a0foreach (var objectProperty in objectPropertiesList)\n\u00a0\u00a0\u00a0\u00a0{\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\/\/ Get custom attributes of object&#039;s properties\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0var customAttributes = objectProperty.GetCustomAttributes(false);\n\u00a0\u00a0\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0string message = &quot;The property {0} will be mapped with the database column {1}&quot;;\n\u00a0\u00a0\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\/\/ Mapping custom attributes with DB columns\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0var mappedColumn = customAttributes\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0.FirstOrDefault(a =&gt; a.GetType() == typeof(DbColumnAttribute));\n\u00a0\u00a0\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0if (mappedColumn != null)\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0{\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0DbColumnAttribute dbColumn = mappedColumn as DbColumnAttribute;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0Console.WriteLine(message, objectProperty.Name, dbColumn.Name);\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0}\n\u00a0\u00a0\u00a0\u00a0}\n}\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">Potremmo anche scrivere un metodo che, utilizzando la Reflection, esamini le propriet\u00e0 e gli attributi di un oggetto e ne ricerchi la chiave primaria:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: csharp; title: ; notranslate\" title=\"\">\nstatic void PrimaryKeySearchMethod&lt;T&gt; (T obj) where T : new()\n{\n\u00a0\u00a0\u00a0\u00a0\/\/ Get the istance&#039;s Type object\n\u00a0\u00a0\u00a0\u00a0Type type = obj.GetType();\n\u00a0\u00a0\n\u00a0\u00a0\u00a0\u00a0\/\/ Get a list of the public properties of the Type object as PropertyInfo objects\n\u00a0\u00a0\u00a0\u00a0PropertyInfo&#x5B;] objectPropertiesList = type.GetProperties();\n\u00a0\u00a0\n\u00a0\u00a0\u00a0\u00a0Console.WriteLine(&quot;Search Primary Key for the object: {0}&quot;, type.Name);\n\u00a0\u00a0\n\u00a0\u00a0\u00a0\u00a0\/\/ Primary Key search\n\u00a0\u00a0\u00a0\u00a0var primaryKey = objectPropertiesList\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0.FirstOrDefault(p =&gt; p.GetCustomAttributes(false)\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0.Any(a =&gt; a.GetType() == typeof(PrimaryKeyAttribute)));\n\u00a0\u00a0\n\u00a0\u00a0\u00a0\u00a0if (primaryKey != null)\n\u00a0\u00a0\u00a0\u00a0{\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0string message = &quot;The Primary Key for {0} class is the property: {1}&quot;;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0Console.WriteLine(message, type.Name, primaryKey.Name);\n\u00a0\u00a0\u00a0\u00a0}\n}\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">Nel codice sopra, passiamo al metodo un oggetto generico di tipo T, il che significa che questo metodo pu\u00f2 essere utilizzato con qualsiasi oggetto di dominio per verificare la presenza di un attributo [<strong>PrimaryKey<\/strong>] .<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Innanzitutto, utilizziamo il metodo&nbsp;<em>GetType()<\/em>&nbsp;per trovare le informazioni sul&nbsp;<strong>Type<\/strong>&nbsp;dell&#8217;oggetto, quindi chiamiamo il metodo&nbsp;<em>GetProperties()<\/em>&nbsp;dell&#8217;istanza&nbsp;<strong>Type,<\/strong>&nbsp;che restituisce un array di oggetti&nbsp;<strong>PropertyInfo<\/strong>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Successivamente, eseguiamo l&#8217;iterazione tramite LINQ su ciascuna delle istanze&nbsp;<strong>PropertyInfo<\/strong>&nbsp;e chiamiamo il metodo&nbsp;<em>GetCustomAttributes()<\/em>&nbsp;, che restituir\u00e0 una matrice di oggetti che rappresentano i&nbsp;<em>CustomAttributes<\/em>&nbsp;trovati su quella propriet\u00e0. Possiamo quindi controllare il tipo di ciascun oggetto&nbsp;<em>CustomAttribute<\/em>&nbsp;e, se \u00e8 di tipo&nbsp;<strong>PrimaryKeyAttribute<\/strong>, sappiamo che abbiamo trovato una propriet\u00e0 che rappresenta una chiave primaria nel nostro database.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Dobbiamo precisare che l\u2019uso della Reflection pu\u00f2 rendere il nostro codice meno performante, ma vista la potenza dei processori odierni, questa cosa si noterebbe solo se il codice venisse utilizzato ripetutamente in un contesto di applicazione molto grande. Potremmo mitigare questo problema utilizzando ad esempio astrazioni piuttosto che tipi concreti, best practice che in genere si traduce nell\u2019utilizzo di un\u2019interfaccia invece di una classe concreta. Utilizzando un\u2019interfaccia, possiamo avere gran parte del nostro codice che interagisce con l\u2019astrazione piuttosto che con il tipo creato dinamicamente.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Se ne avessimo bisogno, potremmo per esempio caricare dinamicamente un assembly una sola volta, all\u2019avvio dell\u2019applicazione; caricare dinamicamente i tipi in esso contenuti, assicurandoci ancora una volta di caricarli una volta sola; ottenuto un tipo potremmo utilizzarlo tramite un\u2019interfaccia che la nostra applicazione user\u00e0 per effettuare tutte le chiamate ai metodi: in questo modo non ci saranno chiamate dinamiche attraverso&nbsp;<strong>MethodInfo<\/strong>&nbsp;e il metodo&nbsp;<em>Invoke<\/em>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Questo semplice esempio di strategia, ci aiuter\u00e0 a ridurre il calo di prestazioni e, poich\u00e9 le interfacce hanno solo membri pubblici, eviteremo anche di interagire coi membri privati della classe. Il risultato \u00e8 che limiteremo l\u2019uso della Reflection solo alle parti dell\u2019applicazione dove ne abbiamo davvero bisogno, massimizzando le PRESTAZIONI pur mantenendo la FLESSIBILIT\u00c0 che vogliamo.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Alla prossima!<\/p>\n\n\n\n\n","protected":false},"excerpt":{"rendered":"<p>Aggiungi funzionalit\u00e0 al tuo codice C# ispezionandolo con la Reflection<\/p>\n","protected":false},"author":196716244,"featured_media":28265,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_et_pb_use_builder":"off","_et_pb_old_content":"","_et_gb_content_width":"","_coblocks_attr":"","_coblocks_dimensions":"","_coblocks_responsive_height":"","_coblocks_accordion_ie_support":"","inline_featured_image":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_wpcom_ai_launchpad_first_post":false,"_jetpack_feature_clip_id":0,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"{title}\n\n{excerpt}\n\n{url}","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":true,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2},"_wpas_customize_per_network":false,"jetpack_post_was_ever_published":false},"categories":[688637374],"tags":[688637382],"class_list":["post-28264","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-blog","tag-c"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.4 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Migliora il tuo codice con la Reflection - Blexin<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/blexin.com\/it\/blog\/migliora-il-tuo-codice-con-la-reflection\/\" \/>\n<meta property=\"og:locale\" content=\"it_IT\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Migliora il tuo codice con la Reflection - Blexin\" \/>\n<meta property=\"og:description\" content=\"Aggiungi funzionalit\u00e0 al tuo codice C# ispezionandolo con la Reflection\" \/>\n<meta property=\"og:url\" content=\"https:\/\/blexin.com\/it\/blog\/migliora-il-tuo-codice-con-la-reflection\/\" \/>\n<meta property=\"og:site_name\" content=\"Blexin\" \/>\n<meta property=\"article:published_time\" content=\"2019-09-17T22:00:00+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2021-01-13T08:40:27+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/i2.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/f7b025a6-cd86-4360-afdc-4a63c29a3ad6.png?fit=1024%2C608&ssl=1\" \/>\n\t<meta property=\"og:image:width\" content=\"1024\" \/>\n\t<meta property=\"og:image:height\" content=\"608\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Francesco Vastarella\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Scritto da\" \/>\n\t<meta name=\"twitter:data1\" content=\"Francesco Vastarella\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tempo di lettura stimato\" \/>\n\t<meta name=\"twitter:data2\" content=\"7 minuti\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/blexin.com\\\/it\\\/blog\\\/migliora-il-tuo-codice-con-la-reflection\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/blexin.com\\\/it\\\/blog\\\/migliora-il-tuo-codice-con-la-reflection\\\/\"},\"author\":{\"name\":\"Francesco Vastarella\",\"@id\":\"https:\\\/\\\/blexin.com\\\/it\\\/#\\\/schema\\\/person\\\/388dae0ca9df603c88b5e41e29cf2d4d\"},\"headline\":\"Migliora il tuo codice con la Reflection\",\"datePublished\":\"2019-09-17T22:00:00+00:00\",\"dateModified\":\"2021-01-13T08:40:27+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/blexin.com\\\/it\\\/blog\\\/migliora-il-tuo-codice-con-la-reflection\\\/\"},\"wordCount\":1064,\"image\":{\"@id\":\"https:\\\/\\\/blexin.com\\\/it\\\/blog\\\/migliora-il-tuo-codice-con-la-reflection\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/i0.wp.com\\\/blexin.com\\\/wp-content\\\/uploads\\\/2020\\\/12\\\/f7b025a6-cd86-4360-afdc-4a63c29a3ad6.png?fit=1024%2C608&ssl=1\",\"keywords\":[\"C#\"],\"articleSection\":[\"Blog\"],\"inLanguage\":\"it-IT\"},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/blexin.com\\\/it\\\/blog\\\/migliora-il-tuo-codice-con-la-reflection\\\/\",\"url\":\"https:\\\/\\\/blexin.com\\\/it\\\/blog\\\/migliora-il-tuo-codice-con-la-reflection\\\/\",\"name\":\"Migliora il tuo codice con la Reflection - Blexin\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/blexin.com\\\/it\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/blexin.com\\\/it\\\/blog\\\/migliora-il-tuo-codice-con-la-reflection\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/blexin.com\\\/it\\\/blog\\\/migliora-il-tuo-codice-con-la-reflection\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/i0.wp.com\\\/blexin.com\\\/wp-content\\\/uploads\\\/2020\\\/12\\\/f7b025a6-cd86-4360-afdc-4a63c29a3ad6.png?fit=1024%2C608&ssl=1\",\"datePublished\":\"2019-09-17T22:00:00+00:00\",\"dateModified\":\"2021-01-13T08:40:27+00:00\",\"author\":{\"@id\":\"https:\\\/\\\/blexin.com\\\/it\\\/#\\\/schema\\\/person\\\/388dae0ca9df603c88b5e41e29cf2d4d\"},\"breadcrumb\":{\"@id\":\"https:\\\/\\\/blexin.com\\\/it\\\/blog\\\/migliora-il-tuo-codice-con-la-reflection\\\/#breadcrumb\"},\"inLanguage\":\"it-IT\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/blexin.com\\\/it\\\/blog\\\/migliora-il-tuo-codice-con-la-reflection\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"it-IT\",\"@id\":\"https:\\\/\\\/blexin.com\\\/it\\\/blog\\\/migliora-il-tuo-codice-con-la-reflection\\\/#primaryimage\",\"url\":\"https:\\\/\\\/i0.wp.com\\\/blexin.com\\\/wp-content\\\/uploads\\\/2020\\\/12\\\/f7b025a6-cd86-4360-afdc-4a63c29a3ad6.png?fit=1024%2C608&ssl=1\",\"contentUrl\":\"https:\\\/\\\/i0.wp.com\\\/blexin.com\\\/wp-content\\\/uploads\\\/2020\\\/12\\\/f7b025a6-cd86-4360-afdc-4a63c29a3ad6.png?fit=1024%2C608&ssl=1\",\"width\":1024,\"height\":608},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/blexin.com\\\/it\\\/blog\\\/migliora-il-tuo-codice-con-la-reflection\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/blexin.com\\\/it\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Migliora il tuo codice con la Reflection\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/blexin.com\\\/it\\\/#website\",\"url\":\"https:\\\/\\\/blexin.com\\\/it\\\/\",\"name\":\"Blexin\",\"description\":\"Con noi \u00e8 semplice\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/blexin.com\\\/it\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"it-IT\"},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/blexin.com\\\/it\\\/#\\\/schema\\\/person\\\/388dae0ca9df603c88b5e41e29cf2d4d\",\"name\":\"Francesco Vastarella\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"it-IT\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/3b8deedae8f35372d5fba49f918006fb0a58a2943aff6ae52d3ff188e0c441bb?s=96&d=identicon&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/3b8deedae8f35372d5fba49f918006fb0a58a2943aff6ae52d3ff188e0c441bb?s=96&d=identicon&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/3b8deedae8f35372d5fba49f918006fb0a58a2943aff6ae52d3ff188e0c441bb?s=96&d=identicon&r=g\",\"caption\":\"Francesco Vastarella\"},\"url\":\"https:\\\/\\\/blexin.com\\\/it\\\/author\\\/francesco-vastarellablexin-com\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Migliora il tuo codice con la Reflection - Blexin","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/blexin.com\/it\/blog\/migliora-il-tuo-codice-con-la-reflection\/","og_locale":"it_IT","og_type":"article","og_title":"Migliora il tuo codice con la Reflection - Blexin","og_description":"Aggiungi funzionalit\u00e0 al tuo codice C# ispezionandolo con la Reflection","og_url":"https:\/\/blexin.com\/it\/blog\/migliora-il-tuo-codice-con-la-reflection\/","og_site_name":"Blexin","article_published_time":"2019-09-17T22:00:00+00:00","article_modified_time":"2021-01-13T08:40:27+00:00","og_image":[{"width":1024,"height":608,"url":"https:\/\/i2.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/f7b025a6-cd86-4360-afdc-4a63c29a3ad6.png?fit=1024%2C608&ssl=1","type":"image\/png"}],"author":"Francesco Vastarella","twitter_card":"summary_large_image","twitter_misc":{"Scritto da":"Francesco Vastarella","Tempo di lettura stimato":"7 minuti"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/blexin.com\/it\/blog\/migliora-il-tuo-codice-con-la-reflection\/#article","isPartOf":{"@id":"https:\/\/blexin.com\/it\/blog\/migliora-il-tuo-codice-con-la-reflection\/"},"author":{"name":"Francesco Vastarella","@id":"https:\/\/blexin.com\/it\/#\/schema\/person\/388dae0ca9df603c88b5e41e29cf2d4d"},"headline":"Migliora il tuo codice con la Reflection","datePublished":"2019-09-17T22:00:00+00:00","dateModified":"2021-01-13T08:40:27+00:00","mainEntityOfPage":{"@id":"https:\/\/blexin.com\/it\/blog\/migliora-il-tuo-codice-con-la-reflection\/"},"wordCount":1064,"image":{"@id":"https:\/\/blexin.com\/it\/blog\/migliora-il-tuo-codice-con-la-reflection\/#primaryimage"},"thumbnailUrl":"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/f7b025a6-cd86-4360-afdc-4a63c29a3ad6.png?fit=1024%2C608&ssl=1","keywords":["C#"],"articleSection":["Blog"],"inLanguage":"it-IT"},{"@type":"WebPage","@id":"https:\/\/blexin.com\/it\/blog\/migliora-il-tuo-codice-con-la-reflection\/","url":"https:\/\/blexin.com\/it\/blog\/migliora-il-tuo-codice-con-la-reflection\/","name":"Migliora il tuo codice con la Reflection - Blexin","isPartOf":{"@id":"https:\/\/blexin.com\/it\/#website"},"primaryImageOfPage":{"@id":"https:\/\/blexin.com\/it\/blog\/migliora-il-tuo-codice-con-la-reflection\/#primaryimage"},"image":{"@id":"https:\/\/blexin.com\/it\/blog\/migliora-il-tuo-codice-con-la-reflection\/#primaryimage"},"thumbnailUrl":"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/f7b025a6-cd86-4360-afdc-4a63c29a3ad6.png?fit=1024%2C608&ssl=1","datePublished":"2019-09-17T22:00:00+00:00","dateModified":"2021-01-13T08:40:27+00:00","author":{"@id":"https:\/\/blexin.com\/it\/#\/schema\/person\/388dae0ca9df603c88b5e41e29cf2d4d"},"breadcrumb":{"@id":"https:\/\/blexin.com\/it\/blog\/migliora-il-tuo-codice-con-la-reflection\/#breadcrumb"},"inLanguage":"it-IT","potentialAction":[{"@type":"ReadAction","target":["https:\/\/blexin.com\/it\/blog\/migliora-il-tuo-codice-con-la-reflection\/"]}]},{"@type":"ImageObject","inLanguage":"it-IT","@id":"https:\/\/blexin.com\/it\/blog\/migliora-il-tuo-codice-con-la-reflection\/#primaryimage","url":"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/f7b025a6-cd86-4360-afdc-4a63c29a3ad6.png?fit=1024%2C608&ssl=1","contentUrl":"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/f7b025a6-cd86-4360-afdc-4a63c29a3ad6.png?fit=1024%2C608&ssl=1","width":1024,"height":608},{"@type":"BreadcrumbList","@id":"https:\/\/blexin.com\/it\/blog\/migliora-il-tuo-codice-con-la-reflection\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/blexin.com\/it\/"},{"@type":"ListItem","position":2,"name":"Migliora il tuo codice con la Reflection"}]},{"@type":"WebSite","@id":"https:\/\/blexin.com\/it\/#website","url":"https:\/\/blexin.com\/it\/","name":"Blexin","description":"Con noi \u00e8 semplice","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/blexin.com\/it\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"it-IT"},{"@type":"Person","@id":"https:\/\/blexin.com\/it\/#\/schema\/person\/388dae0ca9df603c88b5e41e29cf2d4d","name":"Francesco Vastarella","image":{"@type":"ImageObject","inLanguage":"it-IT","@id":"https:\/\/secure.gravatar.com\/avatar\/3b8deedae8f35372d5fba49f918006fb0a58a2943aff6ae52d3ff188e0c441bb?s=96&d=identicon&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/3b8deedae8f35372d5fba49f918006fb0a58a2943aff6ae52d3ff188e0c441bb?s=96&d=identicon&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/3b8deedae8f35372d5fba49f918006fb0a58a2943aff6ae52d3ff188e0c441bb?s=96&d=identicon&r=g","caption":"Francesco Vastarella"},"url":"https:\/\/blexin.com\/it\/author\/francesco-vastarellablexin-com\/"}]}},"jetpack_publicize_connections":[],"jetpack_shortlink":"https:\/\/wp.me\/pcyUBx-7lS","jetpack_sharing_enabled":true,"jetpack_featured_media_url":"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/f7b025a6-cd86-4360-afdc-4a63c29a3ad6.png?fit=1024%2C608&ssl=1","_links":{"self":[{"href":"https:\/\/blexin.com\/it\/wp-json\/wp\/v2\/posts\/28264","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blexin.com\/it\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blexin.com\/it\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blexin.com\/it\/wp-json\/wp\/v2\/users\/196716244"}],"replies":[{"embeddable":true,"href":"https:\/\/blexin.com\/it\/wp-json\/wp\/v2\/comments?post=28264"}],"version-history":[{"count":5,"href":"https:\/\/blexin.com\/it\/wp-json\/wp\/v2\/posts\/28264\/revisions"}],"predecessor-version":[{"id":28276,"href":"https:\/\/blexin.com\/it\/wp-json\/wp\/v2\/posts\/28264\/revisions\/28276"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/blexin.com\/it\/wp-json\/wp\/v2\/media\/28265"}],"wp:attachment":[{"href":"https:\/\/blexin.com\/it\/wp-json\/wp\/v2\/media?parent=28264"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blexin.com\/it\/wp-json\/wp\/v2\/categories?post=28264"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blexin.com\/it\/wp-json\/wp\/v2\/tags?post=28264"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}