首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >GetConstructor.invoke错误

GetConstructor.invoke错误
EN

Stack Overflow用户
提问于 2009-05-01 18:42:19
回答 1查看 1.7K关注 0票数 1

这是一个研究项目。我有三个数据库类A、B、C。有一个工厂类通过它的构造函数接收要创建的类的对象。三个classesA、B、C中的每一个都有一个构造函数,该构造函数具有一个参数来提供数据库连接对象。这是我在工厂类的createObject方法中使用的代码:

代码语言:javascript
复制
Type classtyp = Type.GetType(className);

Type[] constrParam = new Type[1];
constrParam[0] = typeof(DBConnection);
ConstructorInfo constr = database.GetConstructor(constrParam);

return constr.Invoke(constrParam) as Database;

上面的最后一行给出了这个错误。

“不能将‘'System.Data.Common.DbConnection'.”’类型的对象转换为System.RuntimeType类型

“System.RuntimeType”是怎么来的?我正在尝试创建一个A类的对象,该对象的构造函数采用DBconnection类型的变量。

目前,我正在传递给工厂类指令,以便只创建A类的实例。这是A类的代码:

代码语言:javascript
复制
public class SqlServerDB: Database
{
    string str = "";

    public SqlServerDB(DbConnection DBConn)
        : base(DBConn)
    {
        str = "SQLServer";
    }
}

我做错了什么?

谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2009-05-01 18:46:29

Invoke方法接受需要传递给构造函数的对象。您正在传递类型的 DbConnection。您应该传递的是DbConnection的一个实例。

更清楚的是,如果您要直接创建这些对象之一,您可以这样做:

代码语言:javascript
复制
DbConnection connection = GetConnection(); //some method that gives you back a connection object
SqlServerDB db = new SqlServerDB(connection);

不过,你所做的和做这件事是一样的:

代码语言:javascript
复制
Type type = typeof(DbConnection);
SqlServerDB db = new SqlServerDB(type); //This is obviously wrong.
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/812662

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档