internal member

En orientació objectes tenim la capacitat de marcar la visibilitat de les propietats, camps o mètodes.

Els més coneguts: public, protected i private

Potser no tant conegut és internal. Internal significa que un membre és només public dins del seu enssamblat. Fora d’ell és completament privat. És molt útil quan construïm llibreries de classes que son suport d’altres projectes i volem protegir propietats per tal de que no ens facin un mal ús fora del nostre projecte.

El problema, el podem tenir quan necessitem serialitzar una classe que té una propietat d’aquest tipus. L’error que ens pot sortir és semblant a aquest:

The data contract type ‘Secondary.Project.MVVM.ViewModel.ViewModelBase’ cannot be deserialized because the property ‘DisplayName’ does not have a public setter. Adding a public setter will fix this error. Alternatively, you can make it internal, and use the InternalsVisibleToAttribute attribute on your assembly in order to enable serialization of internal members – see documentation for more details. Be aware that doing so has certain security implications.

Tal com diu, l’internal port ser la causa de l’error i per resoldre’l ens demana de posar un atribut dins assembly.cs que ens permet marcar enssamblats de confiança per tal de que l’internal passi a ser una propietat publica per ell.

Personalment pensó que es una mica arriscart però pot ser útil quan no hi ha més possiblitats.

[assembly: InternalsVisibleTo("Main.Project")]

D’aquesta manera estic marcant que el projecte Main.Project és de confiança i per tant tindrà aquest membre com a public.

Pot ser interessant saber-ho, pot ser útil usar-lo.

Anuncis

Deixa un comentari

Fill in your details below or click an icon to log in:

WordPress.com Logo

Esteu comentant fent servir el compte WordPress.com. Log Out / Canvia )

Twitter picture

Esteu comentant fent servir el compte Twitter. Log Out / Canvia )

Facebook photo

Esteu comentant fent servir el compte Facebook. Log Out / Canvia )

Google+ photo

Esteu comentant fent servir el compte Google+. Log Out / Canvia )

Connecting to %s