C#多态性

Nov*_*Net 7 c# polymorphism


运行时多态性和编译时多态性之间有什么区别?另外,早期绑定和后期绑定有什么区别?举例将受到高度赞赏.

Jus*_*ner 34

编译时间多态性

方法重载就是一个很好的例子.您可以使用两个名称相同但签名不同的方法.编译器将选择在编译时使用的正确版本.

运行时多态性

从子类中的父类重写虚方法就是一个很好的例子.另一个是从Interface实现方法的类.这允许您在使用子指定的实现时在代码中使用更通用的类型.给定以下类定义:

public class Parent
{
    public virtual void SayHello() { Console.WriteLine("Hello World!"); }
}

public class Child : Parent
{
    public override void SayHello() { Console.WriteLine("Goodbye World!"); }
}
Run Code Online (Sandbox Code Playgroud)

以下代码将输出"Goodbye World!":

Parent instance = new Child();
instance.SayHello();
Run Code Online (Sandbox Code Playgroud)

早期绑定

在编译时指定类型:

SqlConnection conn = new SqlConnection();
Run Code Online (Sandbox Code Playgroud)

后期绑定

类型在运行时确定:

object conn = Activator.CreateInstance("System.Data.SqlClient.SqlConnection");
Run Code Online (Sandbox Code Playgroud)