直接上代码例子
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace 里式转换
{
internal class Program
{
static void Main(string[] args)
{
//父类
A a = new A();
//子类
B b = new B();
//父类无法直接调用子类方法
//a.BFun();
b.AFun();
//因为子类中拥有父类的内容 所以在实例化时 默认还是原有父元素
//实例化对象是子类 有部分子类所独有的内容并未显示给父元素
A Ba = new B();
Ba.AFun();
//Ba.BFun();
//将父类强制转化为子类 即可使用子类方法
B newB = (B)Ba;
newB.AFun();
newB.BFun();
//is表示类型转换判断
//如果能够转换成功 则返回true 无法转换返回false
//只判断 不转化
Console.WriteLine(Ba is B);
A Ca = new Dog();
//as 类型转化 如果类型可以转换成功则执行返回转换成功之后的对象
//如果转换不成功则返回null
B ca = Ca as B;
if (ca != null)
{
ca.AFun();
ca.BFun();
}
else
{
Console.WriteLine("父元素无法通过子子类实例对象转化子类");
}
}
}
class A
{
public void AFun()
{
Console.WriteLine("这是A方法");
}
}
class B:A
{
public void BFun()
{
Console.WriteLine("这是B方法");
}
}
class Dog:B
{
public void Fun()
{
Console.WriteLine("这个是子子类方法");
}
}
}