麻烦大家给解释下,自己有点乱了,一般来说某个类A实现了了接口I
class A:I
{
   public void method()
    {
        writeline("A method");
     }   public void methodofA()
  {
     writelin("A methodofA");
  }
}interface I:F
{
    void method();
}
interface F
{}
main()
{
   A a=new A();
   a.method();//
   a.methodofA();
   I i=a;
   i.method(); 
   i.methodofA();  F f=a;
   f.method();
   f.methodofa();
   
}
(asp.net中的一般的三层,使用了接口层和反射的)接口不能引用实现它自己的类的实例来调用实例自己特有的方法吗? i.methodofA();就是这个方法!那这样的话实现接口的类必须具有接口的所有方法的实现,还要接口有什么用,我们可以直接只定义实现接口的类(不用实现接口)就可以了,在这个类中直接定义接口中需要实现的所有方法不是一个效果吗?
多态中父类以子类实例身份出现的时候,如果没有隐藏基类实现,调用的是子类实例自己的实现,为什么接口中不能以接口身份引用子类实例而调用子类自己特有的方法?

解决方案 »

  1.   

    你做个强制类型转换就可以了,接口以实例方式出现的时候,其实内存中具有子类的方法,但是编译的时候只会按照接口的定义,因此你在代码编辑的时候只能看见接口定义的方法。
    比如下一段代码
    interface IDuck
        {
            void Swim();
        }
        public class FlyDuck : IDuck
        {
            public void Swim()
            {
            }
            public void Fly()
            {
            }
        }
        public class RocketDuck : IDuck
        {
            public void Swim()
            {
            }
            public void Rocket()
            {
            }
        }
    然后再main中,可以
    static void Main(string[] args)
            {
                IDuck thisDuck = new FlyDuck();
                FlyDuck thisFlyDuck = thisDuck as FlyDuck;
                thisFlyDuck.Fly();
                
            }
    这样就可以调用子类的方法了