Example #1
0
        /* Types classification
		0. Void
		1. Numeric
			1.1. Signed (sbyte, short, int, long);
			1.2. Unsigned (byte, ushort, uint, ulong);
			1.3. Real (float, double, decimal);
		2. Non-numeric
			2.1. Logical (bool);
			2.2. Text (char, string);
			2.3. Object (object);
			2.4. Dynamic (dynamic);
			2.5. Struct (struct);
			2.6. Enumerable (enum);
		 
		A. Value (stack)
			A.a. Numeric;
			A.b. Logical;
			A.c. Char;
			A.d. Struct;
			A.e. Enumerable;
		B. Reference (heap)
			B.a. Object;
			B.b. String;
			B.c. Delegate;
			B.d. Dynamic; */

        /* Types description
		1. Numeric
			1.1. Signed
				1.1.1. sbyte   (SByte)   : 8 bits  (-128..127);
				1.1.2. short   (Int16)   : 16 bits (-32768..32767);
				1.1.3. int     (Int32)   : 32 bits (-2147483648..2147483647);
				1.1.4. long    (Int64)   : 64 bit  (-9223372036854775808..9223372036854775807);
			1.2. Unsigned
				1.2.1. byte    (Byte)    : 8  bits (0..255);
				1.2.2. ushort  (UInt16)  : 16 bits (0..65535);
				1.2.3. uint    (UInt32)  : 32 bits (0..4294967295);
				1.2.4. ulong   (UInt64)  : 64 bits (0..18446744073709551615);
			1.3. Real
				1.3.1. float   (Single)  : 32 bits;
				1.3.2. double  (Double)  : 64 bits;
				1.3.3. decimal (Decimal) : 128 bits;
		2. Non-numeric
			2.1. Logical
				2.1.1. bool    (Boolean) : 8 bit   (true / false);
			2.2. Text
				2.2.1. char    (Char)    : 16 bit  (Unicode: UFT-8 / UTF-16 / UTF-32);
				2.2.2. string  (String);
			2.3. Object
				2.3.1. object  (Object);
			2.4. Dynamic
				2.4.1. dynamic (Object); 
			2.5. Struct
				2.5.1. struct; */

        #endregion


        public static void DynamicUsingExample(dynamic data)
        {
            if (data == null)
                throw new NullReferenceException("data argument should not be null");

            try
            {
                Type type;
                dynamic value;


                value = "Hello!";
                type = value.GetType(); // System.String
                value = 123;
                type = value.GetType(); // System.Int32
                value = true;
                type = value.GetType(); // System.Boolean


                Int32 v = 65;

                object obj = v;
                dynamic dyn = v;

                // deference between object and dynamic
                v = (Int32)obj;
                v = dyn;


                data.SentMessage();

                // probably will be exception but code analyzer is OK ;)
                data.GrabTheDevilByTheHornsAndFuckHimUpTheAss();
            }
            catch (Exception ex)
            {
                throw new ArgumentException("...: " + ex.Message);
            }
        }