O poveste cu doi gemeni în C#

M-am lovit de curând de o situație mai ciudată: două assembly-uri diferite, fără legătură directă între ele, definesc ambele aceeași clasă, în același namespace (nu mă întrebați cum s-a ajuns la situația asta, normal că nu e recomandat etc..).
Problema era: cum folosim ambele clase dintr-un al treilea assembly, in C#? 🙂

Dacă încercăm, obținem ceva de genul:
[Two identical classes in 2 assemblies 1]

Soluția? “extern alias” și “reference alias” (http://msdn.microsoft.com/en-us/library/ms173212.aspx):

Extern alias

 
Altfel spus, când referențiem assembly-ul, putem defini si un ‘alias’ care definește un “root level namespace”, în paralel cu “global”.
Chestia asta, introdusă prin .NET 2.0 parcă, a fost gândită probabil să rezolve micile “DLL hells” care mai apar și în .NET.. 🙂

Pentru cei care mai lucreză și cu C++, nu are nici o legătură cu ‘extern’-ul de acolo, care e folosit de ex. pentru a declara o variabilă globală, având “static storage duration and external linkage” (http://en.cppreference.com/w/cpp/language/storage_duration).

De asemenea, ‘extern’ mai e folosit în C#, pentru a declara ca o metodă e definită extern, de ex. in cod nativ intr-un DLL (cu DllImport) – de asemenea nu are legatură cu cazul de mai sus.

Advertisements
This entry was posted in .NET and tagged , , , . Bookmark the permalink.

Leave a Reply

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

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s