⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 pointerplayaround2.cs

📁 介绍了.NET中的内存管理和指针,包括后台内存的管理,释放资源等.
💻 CS
字号:
using System;

namespace Wrox.ProCSharp.AdvancedCSharp
{
   public class MainEntryPoint
   {
      public static unsafe void Main()
      {
         Console.WriteLine("Size of Currency struct is " + sizeof(CurrencyStruct));
         CurrencyStruct amount1, amount2;
         CurrencyStruct *pAmount = &amount1;
         long *pDollars = &(pAmount->Dollars);
         byte *pCents = &(pAmount->Cents);

         Console.WriteLine("Address of amount1 is 0x{0:X}", (uint)&amount1);
         Console.WriteLine("Address of amount2 is 0x{0:X}", (uint)&amount2);
         Console.WriteLine("Address of pAmt is 0x{0:X}", (uint)&pAmount);
         Console.WriteLine("Address of pDollars is 0x{0:X}", (uint)&pDollars);
         Console.WriteLine("Address of pCents is 0x{0:X}", (uint)&pCents);
         pAmount->Dollars = 20;
         *pCents = 50;
         Console.WriteLine("amount1 contains " + amount1);
         --pAmount;   // this should get it to point to amount2
         Console.WriteLine("amount2 has address 0x{0:X} and contains {1}", 
            (uint)pAmount, *pAmount);
         // do some clever casting to get pCents to point to cents
         // inside amount2
         CurrencyStruct *pTempCurrency = (CurrencyStruct*)pCents;
         pCents = (byte*) ( --pTempCurrency );
         Console.WriteLine("Address of pCents is now 0x{0:X}", (uint)&pCents);
         Console.WriteLine("\nNow with classes");
         // now try it out with classes
         CurrencyClass amount3 = new CurrencyClass();

         fixed(long *pDollars2 = &(amount3.Dollars))
         fixed(byte *pCents2 = &(amount3.Cents))
         {
            Console.WriteLine("amount3.Dollars has address 0x{0:X}", (uint)pDollars2);
            Console.WriteLine("amount3.Cents has address 0x{0:X}", (uint) pCents2);
            *pDollars2 = -100;
            Console.WriteLine("amount3 contains " + amount3);
         }
      }
   }

   struct CurrencyStruct
   {
      public long Dollars;
      public byte Cents;

      public override string ToString()
      {
         return "$" + Dollars + "." + Cents;
      }
   }

   class CurrencyClass
   {
      public long Dollars;
      public byte Cents;

      public override string ToString()
      {
         return "$" + Dollars + "." + Cents;
      }
   }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -