![](https://www.elitesecurity.org/images/static/emoticons/smile.gif)
![](https://www.elitesecurity.org/images/static/emoticons/wink.gif)
What you can’t do is to use those symbols in other .NET languages. The reason is that those languages do not have a concept of things existing outside of a class or struct scope.
In other words, even though the CLR supports it, languages other than C++/CLI do not support free standing functions, variables and constants.
Tako da tvoja tvrdnja ne stoji.
E, ko sve nema MVP danas
![](https://www.elitesecurity.org/images/static/emoticons/smile.gif)
Elem, sledeci kod:
namespace NasMetadata {
const int MojaKonstanta = 42;
int MojaFunkcija(void)
{
return MojaKonstanta;
};
public ref class GCKlasa: Object
{
public:
void Poziv()
{
MojaFunkcija();
}
};
};
je proizveo DLL koji sam zakacio za poruku. Ako pogledas metadata blok i izboris se sa gomilom djubreta koju je C++ nabacao unutra, videces da MojaFunkcija nije free f-ja, ona je deklarisana u IL-u kao:
.class private auto ansi <Module>
{
.method assembly static int32 modopt([mscorlib]System.Runtime.CompilerServices.CallConvCdecl) NasMetadata.MojaFunkcija() cil managed
}
dakle privatni staticki metod privatne klase <Module>. I to je nacin na koji rade "free f-je" u C++/CLI-u, kompajlerskom prevarom, sve su staticke metode ove klase a namespace se simulira dot-separacijom u samom imenu metoda. Jel sad treba i dokaz da ovu "free-fju" mogu da pozovom preko refleksije u C#-u sad kad znam u kojoj klasi je? To sto je C++ kompajler mufte sve markirao kao private da sakrije svoju prevaru od ostalih CLS compliant jezika ne znaci da mu se ne moze doakati.
Kad pogledas implemenatciju GCKlasa::Poziv() dobices sledeci kod poziva staticke metode:
public: void __gc* Poziv()
{
<Module>::NasMetadata.MojaFunkcija();
}
Q.E.D.
Jbga, ne mogu da nadjem taj post, mozda vise i nije online, u svakom slucaju bilo je to jos u doba nastanka CLSa i radilo se o organizaciji GC-a i vezivanju root-va kreiranih objekata za tipove klasa, sto free f-je ne bi imale pa bi za njih morao da se radi posebni GC model sto bi isti usporilo pa su free f-je izbacene iz CLS-a jer ionako istu funkcionalnost postizes sa static metodama, i da je slicna prica vazila i za Javu, to je sve cega se secam. U principu i nije toliko vazno, necu se opirati mnogo.
Slazem se, multiple dispatch ne funkcionise automatski i jeste ogranicenje OOPa, ali ne vidim ni kako bi mogao da radi jer je totalna antiteza polimorfizmu (tj da vazi ono sto ti hoces, da je OO baziran na free f-jama, onda polimorfizam ne bi radio)
Bar koliko sam ja vidjao do sada, pribegavanje multiple dispatch-u je uglavnom bilo posledica loseg OO planiranja i adhoc razvoja sto je izmedju ostalog i tvoj primer. Vidis samim tim sto si uveo raznorodne operacije (kako rece, uvrnuto sabiranje
![](https://www.elitesecurity.org/images/static/emoticons/wink.gif)
![](https://www.elitesecurity.org/images/static/emoticons/smile.gif)
Sve je ovo moglo da se organizuje i drugacije i ne bi ti trebao multiple dispatch i to je do sad uvek bila situacija i sa ostalim ozbiljnijim multiple dispatch problemima.
PS: Zaboravih da okacim DLL, evo ga sada.
[Ovu poruku je menjao mmix dana 20.10.2008. u 14:52 GMT+1]
od naroda koji je bio kosmopolitski napravio narod koji je namršten, mrzovoljan, sumnjicav, zaplašen, narod koji se stalno nešto žali, kome je stalno neko kriv… - Z.Đinđić