Kiterjesztett metódus miért hívható paraméter nélkül mikor pl vár egy stringet? C#.
Valahogyan behelyettesíttődik magától de hogyan?Ezt a fordító csinálja fordítási időben?
Ha egy kiterjesztett metódus paraméterlistájában a this után string van akkor ez azt jelenti,hogy ezt a kiterjesztett metódust nem használhatom más típuson csak stringen.Tehát az intellisense nem fogja felajánlani ezt a metódust ha nem string után írom a pontot?
Tudom,hogyan használjam csak azt nem értem,hogy miért lehetséges pont operátorral hivatkozni erre(pl str.ExtMethod()) mikor ez nem a string típus metódusa hanem egy saját classal bevezetett statikus típusé?
Hogyan van ez megoldva a háttérben?
Miért lehetséges objektummal hivatkozni extension tagfüggvényre mikor ez statikus.
Statikus tagokra pedig osztálynévvel hivatkozunk.
Syntax sugar (szintaktikai édesítőszer) ezeknek a neve: a használatot könnyíti meg. Ahogy a property-k is függvényekké fordítódnak az IL kódban, úgy az extension methodok is ott "helyettesítődnek be" a static függvény hívására. De ezt a dokumentációban is említi ( [link] ):
"In your code you invoke the extension method with instance method syntax. However, the intermediate language (IL) generated by the compiler translates your code into a call on the static method. Therefore, the principle of encapsulation is not really being violated. In fact, extension methods cannot access private variables in the type they are extending."
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!