C# 我可以将类用作.NET中的对象来创建该类的实例吗?
我正在编写一个相当简单的程序,它可以连接到几种不同类型的数据源,包括文本文件和各种数据库。我决定将这些连接类型中的每一种实现为一个从我称为iConnection的接口继承的类。例如,我有TextConnection、MySQLConnection和c。。。作为班级 在另一个静态类中,我有一个字典,其中包含这些连接的可读名称作为键。对于每个字典条目的值,我需要类本身。这样,我可以做以下事情:C# 我可以将类用作.NET中的对象来创建该类的实例吗?,c#,ado.net,C#,Ado.net,我正在编写一个相当简单的程序,它可以连接到几种不同类型的数据源,包括文本文件和各种数据库。我决定将这些连接类型中的每一种实现为一个从我称为iConnection的接口继承的类。例如,我有TextConnection、MySQLConnection和c。。。作为班级 在另一个静态类中,我有一个字典,其中包含这些连接的可读名称作为键。对于每个字典条目的值,我需要类本身。这样,我可以做以下事情: newConnection = new dict[connectionTypeString](); 有没
newConnection = new dict[connectionTypeString]();
有没有办法做到这一点?我对C相当陌生,因此我非常感谢您的帮助。我假设您已经意识到.NET Framework已经有了一个接口和相应的实现程序,它们已经完成了您似乎要做的大部分工作 不管怎样,你要找的是。工厂方法是一种基于用户提供的类型参数(通常是枚举)负责创建特定接口的具体实例的方法
虽然有许多不同的方法来实现该模式,但还是有很多不同的方法。我假设您已经意识到.NET Framework已经有了一个接口和相应的实现者,它们已经完成了您似乎要做的大部分工作 不管怎样,你要找的是。工厂方法是一种基于用户提供的类型参数(通常是枚举)负责创建特定接口的具体实例的方法
虽然有许多不同的方法来实现该模式,但还是有很多不同的方法。请查看System.Data.Common命名空间中的DbProviderFactory类。您可以使用它为给定的提供者创建连接、命令、数据适配器等。例如:
DbProviderFactory factory = DbProviderFactories.GetFactory(providerName);
DbConnection connection = factory.CreateConnection();
其中providerName类似于System.Data.SqlClient或System.Data.OleDb等。请查看System.Data.Common命名空间中的DbProviderFactory类。您可以使用它为给定的提供者创建连接、命令、数据适配器等。例如:
DbProviderFactory factory = DbProviderFactories.GetFactory(providerName);
DbConnection connection = factory.CreateConnection();
其中providerName类似于System.Data.SqlClient或System.Data.OleDb等。模式的另一个变体。只需维护一个类型列表:
Dictionary<string, Type> pizzas = new Dictionary<string, Type>
{
{ "HamAndMushroomPizza", typeof(HamAndMushroomPizza) },
{ "DeluxePizza", typeof(DeluxePizza) },
{ "HawaiianPizza", typeof(HawaiianPizza) }
};
这种方法的吸引力在于,当您无法预先确定可以拥有多少种比萨饼时,您就无法在每次出现新类型的比萨饼时重写比萨饼factoryswitch语句。请考虑在运行时加载DLL,这是另一种模式变体。只需维护一个类型列表:
Dictionary<string, Type> pizzas = new Dictionary<string, Type>
{
{ "HamAndMushroomPizza", typeof(HamAndMushroomPizza) },
{ "DeluxePizza", typeof(DeluxePizza) },
{ "HawaiianPizza", typeof(HawaiianPizza) }
};
这种方法的吸引力在于,当您无法事先确定可以拥有多少种比萨饼时,您就无法在每次有新类型的比萨饼时重写比萨饼factoryswitch语句。请考虑在运行时加载DLL。你可以用它做一些非常酷的DI,或者。去看看。你可以用这个或者做一些很酷的DI