{"id":33252,"date":"2021-06-29T18:05:00","date_gmt":"2021-06-29T16:05:00","guid":{"rendered":"https:\/\/blexin.com\/?p=33252"},"modified":"2021-07-14T17:34:46","modified_gmt":"2021-07-14T15:34:46","slug":"record-personalizzati-in-c-9","status":"publish","type":"post","link":"https:\/\/blexin.com\/it\/blog\/record-personalizzati-in-c-9\/","title":{"rendered":"Record personalizzati in C# 9"},"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=\"33259\" data-permalink=\"https:\/\/blexin.com\/it\/blog\/record-personalizzati-in-c-9\/attachment\/12_ita_1105x656_blog-c9record-b\/\" data-orig-file=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2021\/06\/12_ITA_1105x656_blog-c9record-B.png?fit=1105%2C656&amp;ssl=1\" data-orig-size=\"1105,656\" 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=\"12_ITA_1105x656_blog-c9record-B\" data-image-description=\"\" data-image-caption=\"\" data-medium-file=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2021\/06\/12_ITA_1105x656_blog-c9record-B.png?fit=300%2C178&amp;ssl=1\" data-large-file=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2021\/06\/12_ITA_1105x656_blog-c9record-B.png?fit=1024%2C608&amp;ssl=1\" src=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2021\/06\/12_ITA_1105x656_blog-c9record-B.png?resize=1024%2C608&#038;ssl=1\" alt=\"\" class=\"wp-image-33259\" srcset=\"https:\/\/blexin.com\/wp-content\/uploads\/2021\/06\/12_ITA_1105x656_blog-c9record-B-1024x608.png 1024w, https:\/\/blexin.com\/wp-content\/uploads\/2021\/06\/12_ITA_1105x656_blog-c9record-B-980x582.png 980w, https:\/\/blexin.com\/wp-content\/uploads\/2021\/06\/12_ITA_1105x656_blog-c9record-B-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\">Nel <a href=\"https:\/\/blexin.com\/it\/blog\/record-posizionali-in-c-9\/\" target=\"_blank\" rel=\"noreferrer noopener\">precedente articolo<\/a>, abbiamo analizzato i Record Posizionali che sono la vera innovazione di questa nuova funzionalit\u00e0 di C# 9. Abbiamo scoperto che, dietro le quinte, un record non \u00e8 altro che una classe con dei comportamenti specifici predefiniti, tra i quali l\u2019immutabilit\u00e0 e l\u2019uguaglianza dei valori. <\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Sarebbe quindi possibile scrivere un record con una sintassi simile a quella di una classe? Certo che s\u00ec! Vediamolo:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: csharp; title: ; notranslate\" title=\"\">\n    public record CustomRecordPerson\n    {\n        public string Name { get; set; }\n        public string Surname { get; set; }\n\n        public CustomRecordPerson(string name, string surname)\n        {\n            Name = name;\n            Surname = surname;\n        }\n\n        public CustomRecordPerson()\n        {\n        }\n    }\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">Come possiamo vedere, l\u2019unica differenza con la definizione di una classe, consiste nell\u2019utilizzo della keyword <em>record<\/em> al posto di quella<em> class<\/em>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Possiamo quindi creare un\u2019istanza del nostro record tramite il costruttore:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: csharp; title: ; notranslate\" title=\"\">\nvar customRecordPerson = new CustomRecordPerson(name: &quot;Francesco&quot;, surname:&quot;Vas&quot;); \n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">Oppure tramite un inizializzatore di oggetti, il quale vi ricordo, possiamo utilizzare solo se abbiamo a disposizione anche un costruttore senza parametri:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: csharp; title: ; notranslate\" title=\"\">\nvar customRecordPerson2 = new CustomRecordPerson \n{ \n    Name = &quot;Francesco&quot;, \n    Surname = &quot;Vas&quot; \n}; \n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">Proviamo ora a modificare una delle propriet\u00e0 del nostro record:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: csharp; title: ; notranslate\" title=\"\">\ncustomRecordPerson.Name = &quot;Adolfo&quot;; \n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">Sappiamo che le propriet\u00e0 di un record sono immutabili e, per qualcuno potrebbe quindi essere una sorpresa che il compilatore non ci segnali un errore. Nonostante questa supposizione, possiamo modificare il valore della propriet\u00e0 senza problemi!<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Non dobbiamo infatti pensare erroneamente che un record sia una struttura dati sempre immutabile. Le propriet\u00e0 passate come argomento nel caso dei <a href=\"https:\/\/blexin.com\/it\/blog\/record-posizionali-in-c-9\/\" target=\"_blank\" rel=\"noreferrer noopener\">record posizionali<\/a>, sono sempre immutabili.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Come abbiamo visto infatti, queste vengono impostate di default come propriet\u00e0 di sola inizializzazione. La stessa cosa occorre fare nel nostro caso per ottenere l\u2019immutabilit\u00e0:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: csharp; title: ; notranslate\" title=\"\">\npublic record CustomRecordPerson  \n{ \n    public string Name { get; init; } \n    public string Surname { get; init; } \n\n    \/\/... \n} \n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">Al posto del classico metodo <em>accessore<\/em> di tipo <em>setter<\/em>, abbiamo bisogno di utilizzare il metodo <em>accessore setter<\/em> di tipo <em>init-only <\/em>per le propriet\u00e0 che vogliamo rendere immutabili.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Abbiamo gi\u00e0 parlato della keyword <em>init <\/em>e sappiamo che ci permette di specificare che il valore di quella propriet\u00e0 pu\u00f2 essere settato solo quando l\u2019oggetto viene inizializzato, ma non pu\u00f2 essere modificato successivamente.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Approfondiamo ancor di pi\u00f9 dicendo che questa nuova funzionalit\u00e0 ci permette di ottenere un <em>backing-field<\/em> di sola lettura per la propriet\u00e0, che il compilatore genera per noi dietro le quinte:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: csharp; title: ; notranslate\" title=\"\">\n&#x5B;CompilerGenerated] \n&#x5B;DebuggerBrowsable(DebuggerBrowsableState.Never)] \nprivate readonly string &lt;Name&gt;k__BackingField; \n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">Quindi, in pratica, utilizzare la keyword <em>init <\/em>per una propriet\u00e0 di una <em>classe <\/em>o di un <em>record<\/em>, equivale a scrivere:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: csharp; title: ; notranslate\" title=\"\">\npublic class Person \n{ \n    private readonly string _name; \n\n    public Person(string name) \n    { \n        Name = name; \n    } \n\n    public string Name \n    { \n        get =&gt; _name; \n        init =&gt; _name = value; \n    } \n} \n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">Se provassimo a sostituire la keyword <em>init <\/em>con quella <em>set<\/em>, il compilatore ci segnalerebbe un errore:<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"214\" data-attachment-id=\"33269\" data-permalink=\"https:\/\/blexin.com\/it\/blog\/record-personalizzati-in-c-9\/attachment\/1-set-error\/\" data-orig-file=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2021\/06\/1-set-error.png?fit=1024%2C214&amp;ssl=1\" data-orig-size=\"1024,214\" 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=\"1-set-error\" data-image-description=\"\" data-image-caption=\"\" data-medium-file=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2021\/06\/1-set-error.png?fit=300%2C63&amp;ssl=1\" data-large-file=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2021\/06\/1-set-error.png?fit=1024%2C214&amp;ssl=1\" src=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2021\/06\/1-set-error.png?resize=1024%2C214&#038;ssl=1\" alt=\"\" class=\"wp-image-33269\" srcset=\"https:\/\/blexin.com\/wp-content\/uploads\/2021\/06\/1-set-error.png 1024w, https:\/\/blexin.com\/wp-content\/uploads\/2021\/06\/1-set-error-980x205.png 980w, https:\/\/blexin.com\/wp-content\/uploads\/2021\/06\/1-set-error-480x100.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\">Questo perch\u00e9 i metodi accessori di tipo <em>init-only <\/em>sono abilitati a modificare i campi read-only.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Ecco spiegato tutto il funzionamento che c\u2019\u00e8 dietro l\u2019immutabilit\u00e0 introdotta in C# 9!<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">A prescindere dall\u2019utilizzo o meno dell\u2019immutabilit\u00e0 e quindi della keyword <em>init<\/em>, ovviamente anche un record scritto con questa sintassi alternativa ci fornisce alcune delle funzionalit\u00e0 che abbiamo gi\u00e0 visto per i <em>record posizionali<\/em>. Prendiamo quindi in considerazione la seguente definizione di un record, nella quale abbiamo specificato solo due propriet\u00e0:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: csharp; title: ; notranslate\" title=\"\">\npublic record CustomRecordPerson  \n{ \n    public string Name { get; init; } \n    public string Surname { get; init; } \n} \n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">Ed analizziamo il codice IL che viene generato:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: csharp; title: ; notranslate\" title=\"\">\npublic class CustomRecordPerson : IEquatable&lt;CustomRecordPerson&gt; \n{ \n    protected virtual Type EqualityContract \n    { \n        &#x5B;System.Runtime.CompilerServices.NullableContext(1)] \n        &#x5B;CompilerGenerated] \n        get \n        { \n            return typeof(CustomRecordPerson); \n        } \n    } \n \n    public string Name { get; init; } \n \n    public string Surname { get; init; } \n \n    public override string ToString() \n    { \n        StringBuilder stringBuilder = new StringBuilder(); \n        stringBuilder.Append(&quot;CustomRecordPerson&quot;); \n        stringBuilder.Append(&quot; { &quot;); \n        if (PrintMembers(stringBuilder)) \n        { \n            stringBuilder.Append(&quot; &quot;); \n        } \n        stringBuilder.Append(&quot;}&quot;); \n        return stringBuilder.ToString(); \n    } \n \n    protected virtual bool PrintMembers(StringBuilder builder) \n    { \n        builder.Append(&quot;Name&quot;); \n        builder.Append(&quot; = &quot;); \n        builder.Append((object?)Name); \n        builder.Append(&quot;, &quot;); \n        builder.Append(&quot;Surname&quot;); \n        builder.Append(&quot; = &quot;); \n        builder.Append((object?)Surname); \n        return true; \n    } \n \n    &#x5B;System.Runtime.CompilerServices.NullableContext(2)] \n    public static bool operator !=(CustomRecordPerson? r1, CustomRecordPerson? r2) \n    { \n        return !(r1 == r2); \n    } \n \n    &#x5B;System.Runtime.CompilerServices.NullableContext(2)] \n    public static bool operator ==(CustomRecordPerson? r1, CustomRecordPerson? r2) \n    { \n        return (object)r1 == r2 || (r1?.Equals(r2) ?? false); \n    } \n \n    public override int GetHashCode() \n    { \n        return (EqualityComparer&lt;Type&gt;.Default.GetHashCode(EqualityContract) * -1521134295 + \n        EqualityComparer&lt;string&gt;.Default.GetHashCode(Name)) * -1521134295 + \n        EqualityComparer&lt;string&gt;.Default.GetHashCode(Surname); \n    } \n \n    public override bool Equals(object? obj) \n    { \n        return Equals(obj as CustomRecordPerson); \n    } \n \n    public virtual bool Equals(CustomRecordPerson? other) \n    { \n         return (object)other != null &amp;&amp; EqualityContract == other!.EqualityContract &amp;&amp;  \n         EqualityComparer&lt;string&gt;.Default.Equals(Name, other!.Name) &amp;&amp; \n         EqualityComparer&lt;string&gt;.Default.Equals(Surname, other!.Surname); \n     } \n \n    public virtual CustomRecordPerson &lt;Clone&gt;$() \n    { \n        return new CustomRecordPerson(this); \n    } \n \n    protected CustomRecordPerson(CustomRecordPerson original) \n    { \n        Name = original.Name; \n        Surname = original.Surname; \n    } \n \n    public CustomRecordPerson() \n    { \n    } \n} \n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">Non ci soffermeremo ad analizzare tutte le funzionalit\u00e0, che abbiamo gi\u00e0 discusso nel precedente articolo sui <a href=\"https:\/\/blexin.com\/it\/blog\/record-posizionali-in-c-9\/\" target=\"_blank\" rel=\"noreferrer noopener\">record posizionali<\/a> . Ci limiteremo ad analizzare le differenze tra le funzionalit\u00e0 offerte in modo automatico dai due diversi modi di scrivere un <em>record<\/em>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Come vediamo in questo caso non otteniamo in automatico il costruttore parametrizzato e quindi proprio come per una normale classe ci \u00e8 stato fornito il costruttore di default. Abbiamo ancora tutti i metodi e gli override a supporto dell\u2019uguaglianza strutturale e l\u2019override del metodo ToString() per la rappresentazione testuale del tipo e dei valori delle propriet\u00e0 del <em>record<\/em>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Manca invece il <strong>decostruttore<\/strong>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Per entrambe le sintassi sono presenti un costruttore <em>protected <\/em>e un metodo <em>virtual Clone() <\/em>dei quali non abbiamo parlato precedentemente, ma su di loro si basa il funzionamento della mutazione non distruttiva implementata dai <em>record<\/em>, ossia il funzionamento della keyword <em>with<\/em>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">A prescindere dalla sintassi utilizzata, i&nbsp;<em>record&nbsp;<\/em>supportano l\u2019ereditariet\u00e0.&nbsp;Un&nbsp;<em>record&nbsp;<\/em>infatti pu\u00f2 ereditare da un altro record&nbsp;e pu\u00f2 essere anche di tipo&nbsp;<em>abstract<\/em>.&nbsp;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Ma un&nbsp;<em>record&nbsp;<\/em><strong>non pu\u00f2<\/strong>&nbsp;ereditare da una&nbsp;<em>classe&nbsp;<\/em>e una&nbsp;<em>classe&nbsp;<\/em><strong>non pu\u00f2<\/strong>&nbsp;ereditare da un&nbsp;<em>record<\/em>.&nbsp;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Inoltre&nbsp;possiamo utilizzare i vincoli generici e anche se non esiste alcun vincolo generico specifico per i&nbsp;<em>record<\/em>, i&nbsp;<em>record&nbsp;<\/em>soddisfano il vincolo&nbsp;<em>class<\/em>.&nbsp;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Questo vuol dire che&nbsp;potremmo utilizzare ad esempio, i vicoli&nbsp;generici&nbsp;in questi&nbsp;modi:&nbsp;<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: csharp; title: ; notranslate\" title=\"\">\npublic record GenericRecord&lt;T&gt; where T : class \n{ \n} \npublic class GenericClass&lt;T&gt; where T : CustomRecordPerson \n{ \n} \n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">Con questo terminiamo l&#8217;approfondimento sui <em>record<\/em>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Abbiamo gi\u00e0 parlato dei possibili campi di utilizzo dei <em>record<\/em>, abbiamo imparato che in realt\u00e0 non sono altro che delle classi con dei comportamenti predefiniti e che esistono due tipi di sintassi per poterli scrivere che ci forniscono pi\u00f9 o meno le stesse funzionalit\u00e0.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Onestamente, a meno di particolari esigenze in termini di personalizzazione, ritengo che la sintassi dei <a href=\"https:\/\/blexin.com\/it\/blog\/record-posizionali-in-c-9\/\" target=\"_blank\" rel=\"noreferrer noopener\">record posizionali<\/a> sia molto pi\u00f9 utile, perch\u00e9 ci permette un evidente risparmio di quantit\u00e0 di codice scritto e quindi di tempo di sviluppo.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Quindi quando \u00e8 consigliabile utilizzare un <em>record <\/em>al posto di una <em>classe<\/em>?<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Principalmente, se vogliamo definire un modello che dipenda dall\u2019uguaglianza dei valori e se vogliamo definire un tipo di riferimento per il quale gli oggetti non siano modificabili.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Spero abbiate trovato l\u2019argomento interessante, al prossimo articolo!<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Stay Tuned!<\/p>\n\n\n\n\n","protected":false},"excerpt":{"rendered":"<p>Continuiamo la nostra indagine alla scoperta dei Record in C# 9 <\/p>\n","protected":false},"author":196716244,"featured_media":33259,"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":"","_crdt_document":"","inline_featured_image":false,"jetpack_post_was_ever_published":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"","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},"categories":[688637374],"tags":[688637382],"class_list":["post-33252","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 v27.0 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Record personalizzati in C# 9 - Blexin<\/title>\n<meta name=\"description\" content=\"I record non finiscono di stupirci: la pi\u00f9 importante novit\u00e0 di C# 9 si pu\u00f2 scrivere anche con una sintassi simile a quella di una classe.\" \/>\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\/record-personalizzati-in-c-9\/\" \/>\n<meta property=\"og:locale\" content=\"it_IT\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Record personalizzati in C# 9 - Blexin\" \/>\n<meta property=\"og:description\" content=\"I record non finiscono di stupirci: la pi\u00f9 importante novit\u00e0 di C# 9 si pu\u00f2 scrivere anche con una sintassi simile a quella di una classe.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/blexin.com\/it\/blog\/record-personalizzati-in-c-9\/\" \/>\n<meta property=\"og:site_name\" content=\"Blexin\" \/>\n<meta property=\"article:published_time\" content=\"2021-06-29T16:05:00+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2021-07-14T15:34:46+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/i1.wp.com\/blexin.com\/wp-content\/uploads\/2021\/06\/12_ITA_1105x656_blog-c9record-B.png?fit=1105%2C656&ssl=1\" \/>\n\t<meta property=\"og:image:width\" content=\"1105\" \/>\n\t<meta property=\"og:image:height\" content=\"656\" \/>\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=\"6 minuti\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/blexin.com\/it\/blog\/record-personalizzati-in-c-9\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/blexin.com\/it\/blog\/record-personalizzati-in-c-9\/\"},\"author\":{\"name\":\"Francesco Vastarella\",\"@id\":\"https:\/\/blexin.com\/it\/#\/schema\/person\/388dae0ca9df603c88b5e41e29cf2d4d\"},\"headline\":\"Record personalizzati in C# 9\",\"datePublished\":\"2021-06-29T16:05:00+00:00\",\"dateModified\":\"2021-07-14T15:34:46+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/blexin.com\/it\/blog\/record-personalizzati-in-c-9\/\"},\"wordCount\":833,\"image\":{\"@id\":\"https:\/\/blexin.com\/it\/blog\/record-personalizzati-in-c-9\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2021\/06\/12_ITA_1105x656_blog-c9record-B.png?fit=1105%2C656&ssl=1\",\"keywords\":[\"C#\"],\"articleSection\":[\"Blog\"],\"inLanguage\":\"it-IT\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/blexin.com\/it\/blog\/record-personalizzati-in-c-9\/\",\"url\":\"https:\/\/blexin.com\/it\/blog\/record-personalizzati-in-c-9\/\",\"name\":\"Record personalizzati in C# 9 - Blexin\",\"isPartOf\":{\"@id\":\"https:\/\/blexin.com\/it\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/blexin.com\/it\/blog\/record-personalizzati-in-c-9\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/blexin.com\/it\/blog\/record-personalizzati-in-c-9\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2021\/06\/12_ITA_1105x656_blog-c9record-B.png?fit=1105%2C656&ssl=1\",\"datePublished\":\"2021-06-29T16:05:00+00:00\",\"dateModified\":\"2021-07-14T15:34:46+00:00\",\"author\":{\"@id\":\"https:\/\/blexin.com\/it\/#\/schema\/person\/388dae0ca9df603c88b5e41e29cf2d4d\"},\"description\":\"I record non finiscono di stupirci: la pi\u00f9 importante novit\u00e0 di C# 9 si pu\u00f2 scrivere anche con una sintassi simile a quella di una classe.\",\"breadcrumb\":{\"@id\":\"https:\/\/blexin.com\/it\/blog\/record-personalizzati-in-c-9\/#breadcrumb\"},\"inLanguage\":\"it-IT\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/blexin.com\/it\/blog\/record-personalizzati-in-c-9\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"it-IT\",\"@id\":\"https:\/\/blexin.com\/it\/blog\/record-personalizzati-in-c-9\/#primaryimage\",\"url\":\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2021\/06\/12_ITA_1105x656_blog-c9record-B.png?fit=1105%2C656&ssl=1\",\"contentUrl\":\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2021\/06\/12_ITA_1105x656_blog-c9record-B.png?fit=1105%2C656&ssl=1\",\"width\":1105,\"height\":656,\"caption\":\"custom record in csharp 9\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/blexin.com\/it\/blog\/record-personalizzati-in-c-9\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/blexin.com\/it\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Record personalizzati in C# 9\"}]},{\"@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:\/\/blexin.com\/it\/#\/schema\/person\/image\/\",\"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":"Record personalizzati in C# 9 - Blexin","description":"I record non finiscono di stupirci: la pi\u00f9 importante novit\u00e0 di C# 9 si pu\u00f2 scrivere anche con una sintassi simile a quella di una classe.","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\/record-personalizzati-in-c-9\/","og_locale":"it_IT","og_type":"article","og_title":"Record personalizzati in C# 9 - Blexin","og_description":"I record non finiscono di stupirci: la pi\u00f9 importante novit\u00e0 di C# 9 si pu\u00f2 scrivere anche con una sintassi simile a quella di una classe.","og_url":"https:\/\/blexin.com\/it\/blog\/record-personalizzati-in-c-9\/","og_site_name":"Blexin","article_published_time":"2021-06-29T16:05:00+00:00","article_modified_time":"2021-07-14T15:34:46+00:00","og_image":[{"width":1105,"height":656,"url":"https:\/\/i1.wp.com\/blexin.com\/wp-content\/uploads\/2021\/06\/12_ITA_1105x656_blog-c9record-B.png?fit=1105%2C656&ssl=1","type":"image\/png"}],"author":"Francesco Vastarella","twitter_card":"summary_large_image","twitter_misc":{"Scritto da":"Francesco Vastarella","Tempo di lettura stimato":"6 minuti"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/blexin.com\/it\/blog\/record-personalizzati-in-c-9\/#article","isPartOf":{"@id":"https:\/\/blexin.com\/it\/blog\/record-personalizzati-in-c-9\/"},"author":{"name":"Francesco Vastarella","@id":"https:\/\/blexin.com\/it\/#\/schema\/person\/388dae0ca9df603c88b5e41e29cf2d4d"},"headline":"Record personalizzati in C# 9","datePublished":"2021-06-29T16:05:00+00:00","dateModified":"2021-07-14T15:34:46+00:00","mainEntityOfPage":{"@id":"https:\/\/blexin.com\/it\/blog\/record-personalizzati-in-c-9\/"},"wordCount":833,"image":{"@id":"https:\/\/blexin.com\/it\/blog\/record-personalizzati-in-c-9\/#primaryimage"},"thumbnailUrl":"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2021\/06\/12_ITA_1105x656_blog-c9record-B.png?fit=1105%2C656&ssl=1","keywords":["C#"],"articleSection":["Blog"],"inLanguage":"it-IT"},{"@type":"WebPage","@id":"https:\/\/blexin.com\/it\/blog\/record-personalizzati-in-c-9\/","url":"https:\/\/blexin.com\/it\/blog\/record-personalizzati-in-c-9\/","name":"Record personalizzati in C# 9 - Blexin","isPartOf":{"@id":"https:\/\/blexin.com\/it\/#website"},"primaryImageOfPage":{"@id":"https:\/\/blexin.com\/it\/blog\/record-personalizzati-in-c-9\/#primaryimage"},"image":{"@id":"https:\/\/blexin.com\/it\/blog\/record-personalizzati-in-c-9\/#primaryimage"},"thumbnailUrl":"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2021\/06\/12_ITA_1105x656_blog-c9record-B.png?fit=1105%2C656&ssl=1","datePublished":"2021-06-29T16:05:00+00:00","dateModified":"2021-07-14T15:34:46+00:00","author":{"@id":"https:\/\/blexin.com\/it\/#\/schema\/person\/388dae0ca9df603c88b5e41e29cf2d4d"},"description":"I record non finiscono di stupirci: la pi\u00f9 importante novit\u00e0 di C# 9 si pu\u00f2 scrivere anche con una sintassi simile a quella di una classe.","breadcrumb":{"@id":"https:\/\/blexin.com\/it\/blog\/record-personalizzati-in-c-9\/#breadcrumb"},"inLanguage":"it-IT","potentialAction":[{"@type":"ReadAction","target":["https:\/\/blexin.com\/it\/blog\/record-personalizzati-in-c-9\/"]}]},{"@type":"ImageObject","inLanguage":"it-IT","@id":"https:\/\/blexin.com\/it\/blog\/record-personalizzati-in-c-9\/#primaryimage","url":"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2021\/06\/12_ITA_1105x656_blog-c9record-B.png?fit=1105%2C656&ssl=1","contentUrl":"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2021\/06\/12_ITA_1105x656_blog-c9record-B.png?fit=1105%2C656&ssl=1","width":1105,"height":656,"caption":"custom record in csharp 9"},{"@type":"BreadcrumbList","@id":"https:\/\/blexin.com\/it\/blog\/record-personalizzati-in-c-9\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/blexin.com\/it\/"},{"@type":"ListItem","position":2,"name":"Record personalizzati in C# 9"}]},{"@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:\/\/blexin.com\/it\/#\/schema\/person\/image\/","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_featured_media_url":"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2021\/06\/12_ITA_1105x656_blog-c9record-B.png?fit=1105%2C656&ssl=1","jetpack_shortlink":"https:\/\/wp.me\/pcyUBx-8Ek","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/blexin.com\/it\/wp-json\/wp\/v2\/posts\/33252","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=33252"}],"version-history":[{"count":22,"href":"https:\/\/blexin.com\/it\/wp-json\/wp\/v2\/posts\/33252\/revisions"}],"predecessor-version":[{"id":33326,"href":"https:\/\/blexin.com\/it\/wp-json\/wp\/v2\/posts\/33252\/revisions\/33326"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/blexin.com\/it\/wp-json\/wp\/v2\/media\/33259"}],"wp:attachment":[{"href":"https:\/\/blexin.com\/it\/wp-json\/wp\/v2\/media?parent=33252"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blexin.com\/it\/wp-json\/wp\/v2\/categories?post=33252"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blexin.com\/it\/wp-json\/wp\/v2\/tags?post=33252"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}