我正在尝试在已编译的程序集中使用基类(DataStore)在C#中实现一个类。它需要这样的签名(RavenDb的实现并不相关):
public RavenDbDataStore(TimeSpan objectLifetime) : base(objectLifetime)
{
}
public RavenDbDataStore(TimeSpan objectLifetime, bool enableCaching) : base(objectLifetime, enableCaching)
{
}
然而,调用此类的对象期望构造函数采用两个字符串。我得到一个关于基类的警告,DataStore不包含任何无参数构造函数。
这没有意义,偷看我正在处理的项目的API,另一个类正在做我正在尝试做的事情并且只接受两个字符串作为构造函数,而只继承DataStore类。
关于如何实现这一目标的任何想法?
编辑:我犯了一个错误,并将第二个构造函数标记为“私有”,它应该是公开的。尝试时:
public RavenDbDataStore(TimeSpan objectLifetime,string param1,string param2):base(objectLifetime) { }
我仍然得到:
在ReflectionUtil.CreateObject中找不到构造函数: RavenDbDataStore。构造函数参数可能不匹配,也可能不匹配 是一个抽象的类。参数信息:计数:2。参数类型: System.String,System.String
答案 0 :(得分:5)
问题是你的基类的构造函数带有两个参数,标记为private
,这意味着你不能使用它。
您只需要使用带有单个参数(TimeSpan
)的构造函数,并将其提供给基类:
public YourClass(TimeSpan lifetime) : base(lifetime)
{
}
如果你想要第二个提供其他参数的构造函数,那就可以:
public YourClass(TimeSpan lifetime, string someOtherParam) : base(lifetime)
{
// use someOtherParam
}
编辑以响应编辑:
错误消息:
参数信息:Count:2。参数类型:System.String,System.String
建议你需要向基类传递两个字符串,但不是生命周期:
public RavenDbDataStore(TimeSpan objectLifetime, string param1, string param2)
: base(param1, param2) { }