예제 #1
0
        public void TestGetType()
        {
            var p = new Point();
            Assert.AreEqual(p.GetType(), typeof(Point));

            // class 'Type' has override "=="
            Assert.True(p.GetType() == typeof(Point));
            Assert.True(p is Point);
        }
예제 #2
0
		public static void Run() {
			var p1 = new Point(10, 10);
			var p2 = new Point(20, 20);

			// p1 does NOT get boxed to call ToString (a virtual method)
			Console.WriteLine(p1.ToString()); // (10, 10)

			// p DOES get boxed to call GetType (a non-virtual method)
			Console.WriteLine(p1.GetType()); // Point

			// p1 does NOT get boxed to call CompareTo
			// p2 does NOT get boxed because CompareTo(Point) is called
			Console.WriteLine(p1.CompareTo(p2)); // -1

			// p1 DOES get boxed, and the reference is placed in c
			IComparable c = p1;
			Console.WriteLine(c.GetType()); // Point

			// p1 does NOT get boxed to call ComapreTo
			// Since CompareTo is not being passed a Point variable,
			// CompareTo(Object) is called which requires a reference to
			// a boxed Point
			// c does NOT get boxed because it already refers to a boxed Point
			Console.WriteLine(p1.CompareTo(c)); // 0

			// c does NOT get boxed because it is already refers ti a boxed Point.
			// p2 DOES get boxed because CompareTo(Object) is called
			Console.WriteLine(c.CompareTo(p2)); // -1

			// c is unboxed, and fields are copied into p2
			p2 = (Point)c;

			// Proves that the fields got copied into p2
			Console.WriteLine(p2.ToString()); // (10, 10)
		}