using System;
namespace Reference
{
//具有基类类型的引用变量可以引用基类的实例或派生类的实例。
//引用变量只具有基类的方法成员和数据成员(包括基类的祖先类的方法成员和数据成员),但引用变量并不具有派生类的方法成员和数据成员。
//但由于引用变量引用的是派生类的实例,所以引用的类型为其所引用的实例对象的类型,而非引用变量本身的类型。
/// <summary>
/// Class1 的摘要说明。
/// </summary>
///
class Starter
{
/// <summary>
/// 应用程序的主入口点。
/// </summary>
[STAThread]
static void Main(string[] args)
{
A a;
B b;
a = new A();
a.x = 9;
b = new B();
A ab = b;
a.MethodA();
ab.MethodA();
// ab.MethodB();
b.MethodA();
b.MethodB();
System.Console.WriteLine(a.GetType());
System.Console.WriteLine(ab.GetType());
System.Console.WriteLine(b.GetType());
}
}
class A
{
public int x;
static A()
{
System.Console.WriteLine("aStaticConstruct");
}
public A()
{
System.Console.WriteLine("aObjectConstruct");
}
public void MethodA()
{
System.Console.WriteLine("aA");
}
}
class B:A
{
static B()
{
System.Console.WriteLine("bStaticConstruct");
}
public B()
{
System.Console.WriteLine("bObjectConstruct");
}
public void MethodB()
{
System.Console.WriteLine("bB");
}
}
}