【问题标题】:How do I implement this class given the base class in C#?给定 C# 中的基类,如何实现这个类?
【发布时间】:2013-06-07 17:30:10
【问题描述】:

我正在尝试在 C# 中使用已编译程序集中的基类 (DataStore) 实现一个类。它想要这样的签名(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 中找不到构造函数: RavenDb 数据存储。构造函数参数可能不匹配,或者可能 成为一个抽象类。参数信息:个数:2。参数类型: 系统字符串,系统字符串

【问题讨论】:

    标签: c#


    【解决方案1】:

    问题是你的基类的构造函数带有两个参数标记为private,这意味着你不能使用它。

    您只需要使用带有单个参数的构造函数(TimeSpan),并将其提供给基类​​:

    public YourClass(TimeSpan lifetime) : base(lifetime)
    {
    }
    

    如果您想要提供其他参数的第二个构造函数,这是可能的:

    public YourClass(TimeSpan lifetime, string someOtherParam) : base(lifetime)
    {
         // use someOtherParam
    }
    

    编辑以响应编辑:

    错误信息:

    参数信息:个数:2。参数类型:System.String、System.String

    建议您需要将两个字符串,但不是生命周期,传递给基类:

    public RavenDbDataStore(TimeSpan objectLifetime, string param1, string param2) 
        : base(param1, param2) { }
    

    【讨论】:

    • 谢谢!我仍然收到一个错误(我也犯了一个错误,将第二个构造函数标记为私有,它不是)
    猜你喜欢
    • 2010-12-21
    • 2013-08-20
    • 1970-01-01
    • 1970-01-01
    • 2013-02-14
    • 1970-01-01
    • 2021-03-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多