【问题标题】:ConfigurationPropertyCollection配置属性集合
【发布时间】:2014-03-01 14:00:34
【问题描述】:

我正在尝试使用 OpenEdge 构建一个 ConfigurationElement

USING System.Configuration.ConfigurationSection.
USING System.Configuration.ConfigurationPropertyCollection.

CLASS System.Configuration.foo ABSTRACT INHERITS ConfigurationElement:
   DEFINE PROTECTED OVERRIDE PROPERTY Properties AS CLASS ConfigurationPropertyCollection NO-UNDO GET.
END CLASS.

编译检查的错误信息:

试图覆盖属性或事件“”。只有抽象属性和事件可以被覆盖。 (15133)

编译器在属性或事件定义上找到了 OVERRIDE 修饰符,但在超类之一中找到的匹配属性或事件未标记为抽象。只能覆盖抽象属性和事件。

我做错了什么?

public abstract class ConfigurationSection -> 是抽象的

public abstract class ConfigurationElement -> 父类是抽象的

protected internal virtual ConfigurationPropertyCollection Properties { get; } -> 属性受虚拟保护

【问题讨论】:

    标签: .net openedge


    【解决方案1】:

    您没有做错任何事,OpenEdge 根本不可能。

    OpenEdge 帮助,定义属性声明:

    Override:指定此实例属性覆盖从 ABL 或 .NET 抽象类继承的 abstract 属性。

    您列出的编译器消息证实了这一点。

    但是您可以创建一个 C# ClassLibrary 并将其中的 ConfigurationElement 子类化。通过在 OpenEdge assembly.xml 文件中引用 ClassLibrary DLL,您可以像访问任何其他 .Net 框架类型一样访问您的类。

    【讨论】:

    • protected internal 类型或成员可以被声明它的程序集中的任何代码访问,也可以从另一个程序集中的派生类中访问。来自另一个程序集的访问必须在从声明受保护内部元素的类派生的类声明中进行,并且必须通过派生类类型的实例进行。
    • 你说得对,我忽略了受保护的修饰符。更新了我的答案。
    • 我认为属性与方法没有什么不同。在 ABL 中,您可以使用 METHOD 语句的 OVERRIDE 选项覆盖 ABL 类继承的任何 ABL 方法。您使用类似的 ABL 机制来覆盖 .NET 方法。但是在 .NET 中,您只能覆盖定义为可覆盖的继承方法。同样,在 ABL 中,您只能覆盖已被定义为(在 C# 中)为 virtual 或 abstract 的继承的 .NET 方法。
    • 是的,通过 CLR Bridge 使用 .Net 时确实存在一些限制。如果您能接受答案会很好:-)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-10-04
    • 1970-01-01
    • 2014-07-20
    • 2013-04-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多