我正在调查 Telerik Reporting DataSources 的行为,因为我需要实现一个新的复杂数据源,该数据源与另一个以懒惰方式向 Telerik 提供数据的进程协调。
现在,我想通过实现一个直接实现数据源类的模拟类来研究 Telerik 如何与指定的数据源通信。
class MockDataSource : DataSource
{
internal override object CreateClone()
{
throw new NotImplementedException();
}
}
我添加了CreateClone
方法,因为编译器向我显示以下错误:
错误 CS0534 "模拟数据源"未实现继承的抽象成员"数据源.创建克隆((">
但即使添加了方法,上述错误也不会消失,而且添加的方法似乎也没有覆盖任何内容:
错误 CS0115"模拟数据源.创建克隆((":找不到合适的方法来覆盖
我对 C# 很陌生,但我无法弄清楚为什么会发生这种情况; 此外,Telerik 文档没有在任何地方说明自定义数据源的可行性,该数据源不是提供的:https://docs.telerik.com/reporting/connecting-to-data-data-source-components 之一。
这些错误的原因在于 abstact 方法的可见性修饰符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 程序集之外是不可见的,因此不可能从第三方程序集实际扩展DataSource
抽象类。