   [.net] Flash ActionScript to C#
  Hey!I need some help with converting code written in ActionScript for Adobe Flash to C#.Here's the class I'm trying to convert:package com.frankula.parsers {import flash.utils.Proxy;import flash.utils.flash_proxy;public final class IFFChunkID extends Proxy {private static var _instance:IFFChunkID;private static var _converted:Object;private static var _returnType:String;// rsmp : the resource map that tells where everything else ispublic static function get rsmp():* {(IFFChunkID._instance == null) ? IFFChunkID.getInstance() : null;return IFFChunkID._instance['rsmp'];}public static function get BCON():* { (IFFChunkID._instance == null) ? IFFChunkID.getInstance() : null;return IFFChunkID._instance['BCON'];}public static function get TRCN():* {(IFFChunkID._instance == null) ? IFFChunkID.getInstance() : null;return IFFChunkID._instance['TRCN'];}public static function get BHAV():* {(IFFChunkID._instance == null) ? IFFChunkID.getInstance() : null;return IFFChunkID._instance['BHAV'];}public static function get OBJf():* {(IFFChunkID._instance == null) ? IFFChunkID.getInstance() : null;return IFFChunkID._instance['OBJf'];}public static function get objt():* {(IFFChunkID._instance == null) ? IFFChunkID.getInstance() : null;return IFFChunkID._instance['objt'];}public static function get SLOT():* {(IFFChunkID._instance == null) ? IFFChunkID.getInstance() : null;return IFFChunkID._instance['SLOT'];}public static function get TREE():* {(IFFChunkID._instance == null) ? IFFChunkID.getInstance() : null;return IFFChunkID._instance['TREE'];}public static function get TRPR():* {(IFFChunkID._instance == null) ? IFFChunkID.getInstance() : null;return IFFChunkID._instance['TRPR'];}// OBJD : data about the object (cost, category, etc)public static function get OBJD():* {(IFFChunkID._instance == null) ? IFFChunkID.getInstance() : null;return IFFChunkID._instance['OBJD'];}// CTSS : Catalog text strings in one or more languagespublic static function get CTSS():* {(IFFChunkID._instance == null) ? IFFChunkID.getInstance() : null;return IFFChunkID._instance['CTSS'];}// DGRP : draw group resources that define where sprite images gopublic static function get DGRP():* {(IFFChunkID._instance == null) ? IFFChunkID.getInstance() : null;return IFFChunkID._instance['DGRP'];}// SPR2 : sprite image resourcespublic static function get SPR2():* {(IFFChunkID._instance == null) ? IFFChunkID.getInstance() : null;return IFFChunkID._instance['SPR2'];}// SPRn : more sprite image resourcespublic static function get SPRn():* {(IFFChunkID._instance == null) ? IFFChunkID.getInstance() : null;return IFFChunkID._instance['SPR#'];}// PALT : palettes used by the sprite image resourcespublic static function get PALT():* {(IFFChunkID._instance == null) ? IFFChunkID.getInstance() : null;return IFFChunkID._instance['PALT'];}// BMP_ : Windows BMP format bitmaps; used in catalogs and thought balloonspublic static function get BMP():* {(IFFChunkID._instance == null) ? IFFChunkID.getInstance() : null;return IFFChunkID._instance['BMP_'];}// FBMP : Windows BMP format bitmaps; used in some .flr floor filespublic static function get FBMP():* {(IFFChunkID._instance == null) ? IFFChunkID.getInstance() : null;return IFFChunkID._instance['FBMP'];}// STRn : text strings (animation names, alerts. etc.) in one or more languagespublic static function get STRn():* {(IFFChunkID._instance == null) ? IFFChunkID.getInstance() : null;return IFFChunkID._instance['STR#'];}// TTAs : pie menutext strings in one or more languagespublic static function get TTAs():* {(IFFChunkID._instance == null) ? IFFChunkID.getInstance() : null;return IFFChunkID._instance['TTAs'];}// TTAB : binary menu datapublic static function get TTAB():* {(IFFChunkID._instance == null) ? IFFChunkID.getInstance() : null;return IFFChunkID._instance['TTAB'];}// uChr : text strings used in .FAM filespublic static function get uChr():* {(IFFChunkID._instance == null) ? IFFChunkID.getInstance() : null;return IFFChunkID._instance['uChr'];}// CARR : Carreer data (sim job info)public static function get CARR():* {(IFFChunkID._instance == null) ? IFFChunkID.getInstance() : null;return IFFChunkID._instance['CARR'];}public static function encode(str:String):* {return IFFChunkID._instance[str];}public static function decode(val:uint):* {var hex:String = val.toString(16);return String.fromCharCode(((val & 0xff000000) &gt;&gt; 24), ((val & 0x00ff0000) &gt;&gt; 16), ((val & 0x0000ff00) &gt;&gt; 8), (val & 0x000000ff));}public static function invert2(val:uint):uint {return ((val &gt;&gt; 8) & 0xff)+((val &lt;&lt; 8) & 0xff00);}public static function invert4(val:uint):uint {return ((val & 0xff000000) &gt;&gt; 24) | ((val & 0x00ff0000) &gt;&gt; 8) | ((val & 0x0000ff00) &lt;&lt; 8) | ((val & 0x000000ff) &lt;&lt; 24);}public static function set returnType(type:String):void {(IFFChunkID._instance == null) ? IFFChunkID.getInstance() : null;IFFChunkID._returnType = type;}public function IFFChunkID(singletonEnforcer:SingletonEnforcer) {}private static function getInstance():IFFChunkID {if (IFFChunkID._instance == null) {IFFChunkID._instance = new IFFChunkID(new SingletonEnforcer());IFFChunkID._converted = new Object();IFFChunkID._returnType = IFFChunkReturnType.UINT;}return IFFChunkID._instance;}flash_proxy override function getProperty(name:*):* {if (name != null) {if (name.toString().length == 4) {if (IFFChunkID._converted[name] == null) { IFFChunkID._converted[name] = toChunkID(name); }if (IFFChunkID._returnType == IFFChunkReturnType.UINT) {return IFFChunkID._converted[name];} else if (IFFChunkID._returnType == IFFChunkReturnType.HEX) {return IFFChunkID._converted[name].toString(16);}} else { throw new Error(name+" is not a valid chunk ID"); }}}private function toChunkID(id:String):uint {var a:int = id.charCodeAt(0);var b:int = id.charCodeAt(1);var c:int = id.charCodeAt(2);var d:int = id.charCodeAt(3);return ((a &lt;&lt; 24) | (b &lt;&lt; 16) | (c &lt;&lt; 8) | d);}}}internal final class SingletonEnforcer {}Can someone please help me figure out exactly how this class works? I know it's a singleton, but I don't really know much more than that.Here is an example of how this class is used:private function parseData(byteArray:ByteArray = null):void {var len:int = Math.floor(byteArray.bytesAvailable)-4;IFFChunkID["returnType"] = IFFChunkReturnType.UINT;byteArray.position = 0;for (var i:int=0; i&lt;len; i++) {byteArray.position = i;var nVal:uint = byteArray.readUnsignedInt();if ((nVal == IFFChunkID.rsmp) || (nVal == IFFChunkID.BCON) ||(nVal == IFFChunkID.BHAV) || (nVal == IFFChunkID.BMP)  ||(nVal == IFFChunkID.CTSS) || (nVal == IFFChunkID.DGRP) ||(nVal == IFFChunkID.FBMP) || (nVal == IFFChunkID.OBJD) ||(nVal == IFFChunkID.OBJf) || (nVal == IFFChunkID.objt) ||(nVal == IFFChunkID.PALT) || (nVal == IFFChunkID.SLOT) ||(nVal == IFFChunkID.SPR2) || (nVal == IFFChunkID.SPRn) ||(nVal == IFFChunkID.TRCN) || (nVal == IFFChunkID.TREE) ||(nVal == IFFChunkID.TRPR) || (nVal == IFFChunkID.TTAB) ||(nVal == IFFChunkID.TTAs) || (nVal == IFFChunkID.uChr) ||(nVal == IFFChunkID.CARR)) {var chunk:IFFChunk = toChunk(nVal, byteArray);i += chunk.length;_mainChunks.push(chunk);}}//trace("rscs : "+_mainChunks.length);parseObjects();}Here's what I've converted so far:using System;using System.Collections.Generic;using System.Linq;using System.Text;namespace IffLib.Parsers{    public class IffChunkID    {   private static readonly IffChunkID m_Instance = new IffChunkID();   private static string m_ReturnType;   public string ReturnType   {  set  { IffChunkID.m_ReturnType = value;  }   }   // Explicit static constructor to tell C# compiler   // not to mark type as beforefieldinit   static IffChunkID()   {   }   IffChunkID()   {   }   public static IffChunkID Instance   {  get   { m_ReturnType = IffChunkReturnType.UINT; return m_Instance;  }   }   public static string Decode (uint Value)   {  string Hex = Value.ToString("X");  return new string(new char[]   {  (char)((Value & 0xff000000) &gt;&gt; 24),  (char)((Value & 0x00ff0000) &gt;&gt; 16), (char)((Value & 0x0000ff00) &gt;&gt; 8),  (char)(Value & 0x000000ff)   });   }   public static uint Invert2(uint Value)   {  return ((Value &gt;&gt; 8) & 0xff) + ((Value &lt;&lt; 8) & 0xff00);   }   public static uint Invert4(uint Value)   {  return ((Value & 0xff000000) &gt;&gt; 24) | ((Value & 0x00ff0000) &gt;&gt; 8) | ((Value & 0x0000ff00) &lt;&lt; 8) | ((Value & 0x000000ff) &lt;&lt; 24);   }   private static uint ToChunkID(string ID)   {  int A = ID[0];  int B = ID[1];  int C = ID[2];  int D = ID[3];  return (uint)((A &lt;&lt; 24) | (B &lt;&lt; 16) | (C &lt;&lt; 8) | D);   }    }}One theory I have is that _converted is some kind of array containing elenents of... some kind of type. What kind of type, I'm not sure. :|If this theory is correct, the above example would be the ActionScript way of implementing [Array]Indexers like in C#. Bah... I'm confused!!Someone please help!!IffChunkReturnType simply looks like this:using System;using System.Collections.Generic;using System.Linq;using System.Text;namespace IffLib.Parsers{    internal class IffChunkReturnType    {   public static string UINT = "uint";   public static string HEX = "hex";    }}