创建新的 Telerik DataSource 实现时出现问题:"does not implement inherited abstract member 'DataSource.CreateClone()'"

Problem creating new Telerik DataSource implementation: "does not implement inherited abstract member 'DataSource.CreateClone()'"

我正在研究 Telerik Reporting DataSources 的行为,因为我需要实现一个新的复杂数据源,它与另一个以惰性方式向 Telerik 提供数据的进程协调。

现在,我想研究 Telerik 如何通过实现一个直接实现 DataSource class.

的模拟 class 来与指定的数据源对话
class MockDataSource : DataSource
{
    internal override object CreateClone()
    {
        throw new NotImplementedException();
    }
}

我添加了 CreateClone 方法,因为编译器向我显示了以下错误:

Error CS0534 'MockDataSource' does not implement inherited abstract member 'DataSource.CreateClone()'

但即使使用添加的方法,上述错误也不会消失,而且添加的方法似乎没有覆盖任何内容:

Error CS0115 'MockDataSource.CreateClone()': no suitable method found to override

我是 C# 的新手,但我不明白为什么会这样; Telerik 文档也没有在任何地方说明自定义数据源的可行性,这不是所提供的数据源之一:https://docs.telerik.com/reporting/connecting-to-data-data-source-components.

这些错误的原因在于抽象方法的可见性修饰符CreateClone():在 JetBrains Rider 的帮助下检查从 DLL 反编译的库代码,可以看到该方法被声明为internal:

[...]

namespace Telerik.Reporting
{
  [SRCategory("DataSources_Category")]
  [ToolboxItemFilter("VS.Telerik.Reporting.14.1.20.513", ToolboxItemFilterType.Require)]
  public abstract class DataSource : Component, ISimpleDataSource, IDataSource, INamedObject, ICloneable
  {
    [...]

    internal abstract object CreateClone();

    [...]
  }
}

正因为如此,我们需要重写的方法在 Telerik 的程序集之外是不可见的,所以实际上不可能从 third-party 扩展 DataSource 抽象 class组装.