2011-05-23 13 views
5

Recientemente me he enterado del hecho de que necesito especificar la opción "inseguro" cuando trabajo con ciertos conceptos en C#/Mono. No solo tengo que especificar la opción en mi código, también debo especificarlo al compilarlo, lo que invoca la sensación de que "este código es intrínsecamente inseguro y riesgoso de usar". Lo extraño es que DllImport no necesita la marca insegura, por lo que puedo crear segfaults todo lo que quiero en mi "código de seguridad". ¿Hay alguna razón para evitar el código inseguro que he pasado por alto?¿Hay algún punto para evitar el uso de "inseguro" en Mono?

+0

Lo evitarías por las mismas razones por las que lo evitarías en .NET Framework. Como Skolima indicó que no es seguro, en teoría, manejarás todo lo relacionado con el código. Esto significa que si quieres dejar cosas en la memoria que no se pueden limpiar, puedes hacer exactamente eso. No estaría de acuerdo con el comentario. Sin embargo, DllImport no es una buena idea. –

Respuesta

7

DllImport es un concepto bien conocido para la mayoría de los desarrolladores de C#. También resulta en un área relativamente pequeña donde podría ocurrir el segfault. Con el código unsafe puede crear bloqueos aleatorios mucho más fácilmente y en lugares no relacionados con la llamada unsafe (manipulando regiones de memoria fuera de lo que creía que estaba tocando).

Es muy parecido a las advertencias del compilador: algunos desarrolladores no les prestan atención, algunos convierten "Tratar advertencias como errores" en "Todos". ¿Adivina qué resultados en el código es más fácil de mantener?

Además, DllImport en sí no es una buena idea si se puede evitar (debido a posibles problemas de rotura/errores perdidos/portabilidad y así sucesivamente).

+1

Derecha. Básicamente, un bloque inseguro es exactamente una gran bandera roja que dice "¡eh, este código es de hecho inseguro y arriesgado de usar!" Porque es; has desactivado las protecciones de seguridad puestas en su lugar porque el código inseguro era fácil de estropear en primer lugar. – Andy

Cuestiones relacionadas