假设类型 ClassA 有子类 ClassB,用静态类分别给ClassA 和 ClassB 加上同名的扩展方法,然后创建对象 ClassA obj = new ClassB(),实例调用 obj 扩展方法时,只会调用其声明类型(ClassA)对应的扩展方法,而不会像普通子类 override 父类 virtual/abstract 方法那样去调用子类的同名扩展方法,即不具有多态性质。
代码验证:
namespace TestExtensions
{
internal class Program
{
private static async Task Main(string[] args)
{
ClassA obj = new ClassB();
Console.WriteLine(obj.GetName());//输出 A
Console.WriteLine(((ClassB)obj).GetName());//输出 B
}
}
class ClassA
{
}
class ClassB : ClassA
{
}
static class ClassExtensions
{
public static string GetName(this ClassA a)
{
return "A";
}
public static string GetName(this ClassB a)
{
return "B";
}
}
}