using System; class Base { public virtual void WhoAmI() { Console.WriteLine("Base"); } } class Derived: Base { public override void WhoAmI() { Console.WriteLine("Derived"); } } public class TotheBaseClassofanObject { public static void Main() { Derived d = new Derived(); Base b = d; b.WhoAmI(); Derived d2 = (Derived) b; object o = d; Derived d3 = (Derived) o; } }
Conversions of Classes (Reference Types)To an Interface the Object Might Implement
/* A Programmer's Introduction to C# (Second Edition) by Eric Gunnerson Publisher: Apress L.P. ISBN: 1-893115-62-3 */ // 15 - ConversionsConversions of Classes (Reference Types)To an Interface // the Object Might Implement // copyright 2000 Eric Gunnerson using System; interface IDebugDump { string DumpObject(); } class Simple { public Simple(int value) { this.value = value; } public override string ToString() { return(value.ToString()); } int value; } class Complicated: IDebugDump { public Complicated(string name) { this.name = name; } public override string ToString() { return(name); } string IDebugDump.DumpObject() { return(String.Format( "{0} Latency: {1} Requests: {2} Failures: {3} ", new object[] {name, latency, requestCount, failedCount} )); } string name; int latency = 0; int requestCount = 0; int failedCount = 0; } public class ToanInterfacetheObjectMightImplement { public static void DoConsoleDump(params object[] arr) { foreach (object o in arr) { IDebugDump dumper = o as IDebugDump; if (dumper != null) Console.WriteLine("{0}", dumper.DumpObject()); else Console.WriteLine("{0}", o); } } public static void Main() { Simple s = new Simple(13); Complicated c = new Complicated("Tracking Test"); DoConsoleDump(s, c); } }
Conversions:Numeric Types:Explicit Numeric Conversions
using System; public class ExplicitNumericConversions { public static void Main() { uint value1 = 312; byte value2 = (byte) value1; Console.WriteLine("Value2: {0}", value2); } }
Conversions:Numeric Types:Conversions and Member Lookup
using System; class Conv { public static void Process(sbyte value) { Console.WriteLine("sbyte {0}", value); } public static void Process(short value) { Console.WriteLine("short {0}", value); } public static void Process(int value) { Console.WriteLine("int {0}", value); } } public class ConversionsandMemberLookup { public static void Main() { int value1 = 2; sbyte value2 = 1; Conv.Process(value1); Conv.Process(value2); } }
Conversions:Numeric Types:Checked Conversions
using System; public class UNCheckedConversions { public static void Main() { uint value1 = 312; byte value2; value2 = unchecked((byte) value1); // never checked value2 = (byte) value1; // checked if /checked value2 = checked((byte) value1); // always checked } }
Numeric Types: Checked Conversions
using System; public class CheckedConversions { public static void Main() { checked { uint value1 = 312; byte value2 = (byte) value1; Console.WriteLine("Value: {0}", value2); } } }
Conversions: Numeric Types
public class NumericTypesConversion { public static void Main() { // all implicit sbyte v = 55; short v2 = v; int v3 = v2; long v4 = v3; // explicit to "smaller" types v3 = (int) v4; v2 = (short) v3; v = (sbyte) v2; } }