¿Sabían que C# soporta acceso directo a la memoria utilizando pointers (apuntadores)?
Todo el código, que funciona bajo este tipo de mecanismo se llama código no-seguro (unsafe code), dado que la mayoría de este código se «salta» el manejo de memoria de .NET
Pero bueno, en realidad el unsafe code de todos modos sigue siendo código administrado (managed-code), por que a final de cuentas sigue corriendo dentro del CLR y mecanismos como el garbage collector siguen funcionando. Así es, el GC sigue de todos modos, recolectando código no-seguro.
He leído en algunos lados, que todo lo que se puede hacer en C# se puede hacer en VB.NET. Mi punto de vista es que casi-todo, ya que VB.NET no soporta unsafe-code. Tal vez será por que visualizamos esto para facilitar la tarea de portar aplicaciones en C++ a C# con un minimo de fuzz…
Tambien nos sirve mucho cuando queremos utilizar algunas llamadas al Win32 API que requiere apuntadores. La sintaxis del código no-seguro es ponerle de prefijo al método la palabra «unsafe» dentro del la función y fácilmente nos permitirá marcarla como codigo no-seguro. Checa este ejemplo:
1 | unsafe public void ThisIsAnUnsafeMethod(int* ptr) |
2 | { |
3 | *ptr = 3; |
4 | } |
Recuerda que solo se puede aplicar el atributo unsafe a métodos y propiedades, no a miembros individuales dentro de enunciados o miembros de claeses.
Por último, el compilador de C# no soporta el código no-seguro por default. Hay que habilitarlo explicitamente dentro de la configuración del proyecto, en Project Properties->Allow Unsafe code Blocks.
Para más información acerca de unsafe-code y sus posibles usos:
http://www.codeguru.com/Csharp/Csharp/cs_syntax/unsafe/article.php/c5879/
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/csref/html/vclrfUnsafe.asp
http://www.csharpfriends.com/Articles/getArticle.aspx?articleID=351
http://www.codeproject.com/csharp/unsafe.asp
Cheers!
Deja una respuesta
Lo siento, debes estar conectado para publicar un comentario.