动态创建对象,Activator.CreateInstance(),抽象类抽象方法,多态
DynamicCreateInstance\Program.cs
// 静态创建
BaseHandler handler = new HelloHandler();
handler.Execute(); // 只能处理Hello
// 动态创建
System.Console.WriteLine("input 1 or 2:");
string? messageType = System.Console.ReadLine();
Type handlerType = messageType == "1" ? typeof(HelloHandler) : typeof(ByeHandler);
// 👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇
BaseHandler? baseHanlder = Activator.CreateInstance(handlerType) as BaseHandler; // 根据类型创建具体示例,多态
baseHanlder?.Execute(); // 可以处理任意类
DynamicCreateInstance\BaseHandler.cs
// 👇👇👇👇👇👇
// 抽象类,抽象方法
public abstract class BaseHandler
{
public abstract void Execute();
}
// 👇👇👇👇👇👇👇👇👇
// 继承抽象类,实现抽象方法
public class HelloHandler : BaseHandler
{
public override void Execute() => Console.WriteLine("Hello");
}
public class ByeHandler : BaseHandler
{
public override void Execute() => Console.WriteLine("Bye");
}
DynamicCreateInstance\DynamicCreateInstance.csproj
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net6.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
</PropertyGroup>
</Project>
cd ..
format.bat
DynamicCreateInstance\run.bat
dotnet run