【问题标题】:How to make Delphi Prism indexed properties visible to C# when properties are not default当属性不是默认值时,如何使 Delphi Prism 索引属性对 C# 可见
【发布时间】:2010-03-18 21:43:52
【问题描述】:

我有几个带有索引属性的 Delphi Prism 类,我在 C# Web 应用程序中经常使用它们(我们正在将大型 Delphi Win32 系统迁移到 ASP.Net)。我的问题是,如果索引属性不是其类的默认属性,C# 似乎看不到它们。也许我做错了什么,但我完全迷失了。

我知道这个问题看起来很像错误报告,但在我报告错误之前,我需要知道其他人是否知道如何解决这个问题。

如果我有这样的课程:

TMyClass = public class
private
  ...
  method get_IndexedBool(index: Integer): boolean;
  method set_IndexedBool(index: Integer; value: boolean);
public
  property IndexedBool[index: Integer]: boolean
        read get_IndexedBool
        write set_IndexedBool; default; // make IndexedBool the default property
end;

我可以像这样在 C# 中使用这个类:

var myObj = new TMyClass();

myObj[0] = true;

但是,如果 TMyClass 是这样定义的:

TMyClass = public class
private
  ...
  method get_IndexedBool(index: Integer): boolean;
  method set_IndexedBool(index: Integer; value: boolean);
public
  property IndexedBool[index: Integer]: boolean
        read get_IndexedBool
        write set_IndexedBool; // IndexedBool is not the default property anymore
end;

然后 IndexedBool 属性在 C# 中变得不可见。我可以使用它的唯一方法是这样做:

var myObj = new TMyClass();

myObj.set_IndexedBool(0, true);

我不知道我是否遗漏了什么,但如果我删除属性声明中的 default ,我将看不到 IndexedBool 属性。除此之外,我很确定直接访问类实例的私有方法是错误的。

有什么想法吗?

【问题讨论】:

    标签: c# delphi delphi-prism oxygene


    【解决方案1】:

    我相信 C# 4.0 will support 索引的属性,但遗憾的是,在此之前的任何内容都不会。

    不幸的是,您要求的是 C# 而不是 Delphi Prism 的限制。来自Delphi Prism vs C# 上的 Delphi Prism 文档 wiki 页面:

    C# 只能访问默认的索引属性。在 Delphi Prism 中,您可以使用它们的名称定义和使用其他索引属性。

    此页面还概述了 Delphi Prism 代码包含 C# 的独特或扩展功能的其他领域,这些功能可能对您的移植有用。

    【讨论】:

    • 是的,我用它来在我的应用程序中使用的一些 C# 类上实现索引属性,但问题在于我的 Delphi Prism 类。我认为这是 Delphi Prism 的限制,但由于它适用于 VB,所以我认为 C# 是罪魁祸首。
    • 是的,这是 C# 限制而不是 Delphi Prism 限制。您必须绕过 C# 支持而不是 Prism 支持。
    • 更新了我的回答以反映。
    • 在问这里之前我应该​​先看看 wiki 页面。谢谢你的回答。
    【解决方案2】:

    这很不幸,但这是 C# 允许您访问索引属性的唯一方式。这是 C# 编译器的限制(vb.net 应该可以做到)。

    【讨论】:

      【解决方案3】:

      既不美观也不干净,但作为一种快速的解决方法,您可以公开索引属性访问器。这样您就可以在 C# 中使用它们来访问这些值。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2010-11-14
        • 2016-03-17
        • 2016-08-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多