Chapter 16. Unsafe Code

Visual C# .NET (C#) allows you to step outside of the safe environment of managed code and write code that is considered “unsafe” by the Common Language Runtime (CLR). Running code that is considered unsafe by the CLR presents a certain set of restrictions in exchange for opening up possibilities like accessing memory-mapped data or implementing time-critical algorithms that use pointers directly. These restrictions are mainly based in the Code Access Security (CAS) system of the CLR and are in place to draw a distinct line between code the CLR knows to be playing by the rules (or “safe”), and code that needs to do a bit outside of the traditional sandbox of the CLR (and is thus “unsafe” code). In order to run code that is marked as unsafe by the CLR, you need the CAS SkipVerification privilege granted to the assembly that the unsafe code is implemented in. This tells the CLR to not bother verifying the code and to allow it to run, whereas normally unverified code would not run. This is a highly privileged operation and is not to be done lightly, as you increase the permissions your application will require in order to operate correctly on a user’s system. If you use unsafe types in a method signature, you also make the code non-CLS-compliant. This means that interoperability with other .NET based languages, like VB.NET or Managed C++, for this assembly is compromised.

Even though unsafe code allows you to easily write potentially unstable code, it does ...

Get C# Cookbook now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.