interface IA //接口IA
{
void F(); //接口IA 方法;
}
class A:IA //类A继承于接口IA
{
void IA.F() //接口IA的方法F(), 前面不可有public或者其他修饰符.
{
Console.Write("IA.F()");
}
public void F() //类A的方法F();
{
Console.Write("A.F()");
}
}
class B:A, IA //类B继承于类A, 而且又继承于接口IA.
{
new public void F() //类B的方法.
{
Console.Write("B.F()");
}
}
class Test
{
public static void Main()
{
A c=new B(); //新建一个类B, 并将此类B强制赋予类A的实例c.
((IA)c).F(); //写出实例c的IA接口的方法F().
}
}
结果:B.F()
结论: 如果有继承的父类并且映射到接口,而且此类也映射到和父类相同的接口, 如上. 这个时候就应该忽略父类的映射接口的影响.而是直接从接口中得到.
范例2:改写 A c=new B();
c.F();
结果:A.F()
结论:新建类B(),并将它赋予类A的实例c, 所以只能是类A中的方法.如果类B()中有一个方法叫G(), 类A中没有, 若执行c.G()这个时候会弹出错误,说明实例c所对应的类A没有方法G(). 所以对于这种情况一定认清前面的类A为对象实例的类, 而不是后面的类B.
using System;
interface IA
{
void F();
}
class A:IA
{
void IA.F() //-----Interface IA method F() implement
{
Console.Write("IA.F()");
}
public void F() //------class A method F().
{
Console.Write("A.F()");
}
}
class B:A
{
new public void F()
{
Console.Write("B.F()");
}
public void G()
{
Console.Write("B.G()");
}
}
class Test
{
public static void Main()
{
A c=new B();
c.F();
}
}
Result:
A.F()
结论: 此时类A的实例c, 直接从A的方法F()调用出来.
范例二:
如果将
A c=new B();
((IA)c).F();
结果是:
IA.F()
结论是此时会从类A中接口的IA方法调用出来.
{
void F(); //接口IA 方法;
}
class A:IA //类A继承于接口IA
{
void IA.F() //接口IA的方法F(), 前面不可有public或者其他修饰符.
{
Console.Write("IA.F()");
}
public void F() //类A的方法F();
{
Console.Write("A.F()");
}
}
class B:A, IA //类B继承于类A, 而且又继承于接口IA.
{
new public void F() //类B的方法.
{
Console.Write("B.F()");
}
}
class Test
{
public static void Main()
{
A c=new B(); //新建一个类B, 并将此类B强制赋予类A的实例c.
((IA)c).F(); //写出实例c的IA接口的方法F().
}
}
结果:B.F()
结论: 如果有继承的父类并且映射到接口,而且此类也映射到和父类相同的接口, 如上. 这个时候就应该忽略父类的映射接口的影响.而是直接从接口中得到.
范例2:改写 A c=new B();
c.F();
结果:A.F()
结论:新建类B(),并将它赋予类A的实例c, 所以只能是类A中的方法.如果类B()中有一个方法叫G(), 类A中没有, 若执行c.G()这个时候会弹出错误,说明实例c所对应的类A没有方法G(). 所以对于这种情况一定认清前面的类A为对象实例的类, 而不是后面的类B.
using System;
interface IA
{
void F();
}
class A:IA
{
void IA.F() //-----Interface IA method F() implement
{
Console.Write("IA.F()");
}
public void F() //------class A method F().
{
Console.Write("A.F()");
}
}
class B:A
{
new public void F()
{
Console.Write("B.F()");
}
public void G()
{
Console.Write("B.G()");
}
}
class Test
{
public static void Main()
{
A c=new B();
c.F();
}
}
Result:
A.F()
结论: 此时类A的实例c, 直接从A的方法F()调用出来.
范例二:
如果将
A c=new B();
((IA)c).F();
结果是:
IA.F()
结论是此时会从类A中接口的IA方法调用出来.