强制转换成接口,为什么总执行printer内的方法,不执行xiao内的方?C#

来源:百度知道 编辑:UC知道 时间:2024/05/16 00:32:57
using System;
using System.Collections.Generic;
using System.Text;

namespace ExtendTranseform
{
interface Iprint
{
void print();
}

class printer : kaishi, Iprint
{
#region Iprint 成员
public void print()
{
Console.Write("打印机");
}
#endregion
}

class xiao:Iprint
{
#region Iprint 成员
public void print()
{
Console.Write("小打印机:");
}
#endregion
}

class kaishi : xiao
{

}
class Program
{
static void Main(string[] args)
{
printer m_print = new printer();
kaishi m_kaishi = m_print;
((Iprint)(m_kaishi)).print();
//强制转换成接口,为什么总执行pr

再怎么转还是printer的实例,只是说他现在只能访问Iprint提供的方法

比如printer类还有一个print2方法,这时就访问不了

当让printer类不实现Iprint接口时,printer的实例就不能访问Iprint提供的方法,而他的父类可以访问,则调用父类实现的Iprint提供的方法

Iprint 是基类,xiao和kaishi都是派生类,m_kaishi被转换成Iprint了,就只只会执行Iprint的方法,不执行派生类方法,建议好好理解一下继承原理,祝学成!

因为你没有override,你这样写等于是public new void print(),作为基类自然是无法访问到。

推荐您去这看看,这样的问题都有详细的解决方法,他们的java教程讲解的比较全,你可以去学习下,希望对你有帮助
参考资料:http://www.baidu.com/s?wd=%B1%B1%B7%E7%CD%F8&rsv_bp=0&rsv_spt=3&inputT=100