using System;
namespace TypeSafety
{
//具有基类类型的引用变量可以引用基类的实例或派生类的实例。
//派生类对象可以隐式强制转换为其基类对象或其本身类对象;但基类对象必须显示强制转换为其派生类对象。
//new返回该类实例对象的引用。
class Starter
{
/// <summary>
/// 应用程序的主入口点。
/// </summary>
[STAThread]
static void Main(string[] args)
{
object o = new object();
A a = new A();
B b = new B();
object oa = new A();
object ob = new B();
object ob1 = ob;
A ab = new B();
A ab1 = b;
//CTE-----------------------------
A ao = new object();
A ao = o;
B bo = new object();
B bo = o;
B b1 = ab;
//-------------------------------
B b2 = (B)b;
B b3 = (B)ab;
//如果等号右边的表达式类型与左边的变量类型相匹配(类型相同、可以隐式转换、强类型转换),则编译通过(编译器允许赋值操作)
//RTE----------------------------
B b4 = (B)a;
A a1 = (A)o;
//-------------------------------
A a2 = (B)ab;
}
class A
{
static A()
{
System.Console.WriteLine("aStaticConstruct");
}
public A()
{
System.Console.WriteLine("aObjectConstruct");
}
}
class B:A
{
static B()
{
System.Console.WriteLine("bStaticConstruct");
}
public B()
{
System.Console.WriteLine("bObjectConstruct");
}
}
}
}