为啥 C++ CLI 索引属性在 C# 中不起作用?

Posted

技术标签:

【中文标题】为啥 C++ CLI 索引属性在 C# 中不起作用?【英文标题】:Why C++ CLI indexed properties does not work in C#?为什么 C++ CLI 索引属性在 C# 中不起作用? 【发布时间】:2013-03-12 10:23:57 【问题描述】:

有两个项目,一个 C++ CLI 和另一个 C# 项目。 C# 项目中引用了 C++ CLI 程序集。

一切都很好,除了索引属性不起作用。 C++ CLI 代码:

property Nullable< int> PVarInt[System::String^] 
    Nullable<int> get(System::String^ inx)
    
    void set(System::String^ inx, Nullable< int>  newx)
    

C# 中的代码显示为两个 set 和 get 方法,如下所示:

get_PVarInt(..)
set_PVarInt(..)

这是一个错误吗?有解决办法吗?为什么会发生这种情况?

【问题讨论】:

> 使用这种调用机制,但很少不安全。 System.Diagnostics.Process 进程 = 新 System.Diagnostics.Process(); process.StartInfo.FileName = "App.exe"; process.StartInfo.Arguments = "arg1 arg2 arg3"; process.Start(); 我写了一篇关于我在将 VB.NET 应用程序转换为 C# 时创建的类的博客文章,它可能对你有用。 PropertyWrapper @JensGranlund 这很有用,谢谢 【参考方案1】:

C# 不支持除this 属性之外的索引属性。

但是 .NET 框架确实如此,因此当使用支持该语言的语言创建索引属性时,它将在 C# 中显示为一个 get_Method 和一个 set_Method

【讨论】:

有解决办法吗? @Mahdi,这取决于您所说的修复。只要您正在访问由另一种语言创建的 C# 中的索引属性。但是您可以在 C# 中通过创建具有对象的属性并使用该对象索引该属性来伪造 C# 中的索引属性。【参考方案2】:

C++/CLI 具有可从 C# 获得的索引属性: 示例:

public ref class ClassWithIndexer

private:
    array<int> ^x;
public:
    property int default[int]
    
        int get(int index)
        
            return x[index];
        
        void set(int index, int value)
        
            x[index] = value;
        
    
;

【讨论】:

谢谢我已经在使用这种方式了。我已将我的属性移植到类中。

以上是关于为啥 C++ CLI 索引属性在 C# 中不起作用?的主要内容,如果未能解决你的问题,请参考以下文章

为啥使用命名空间在我的 C++ 项目中不起作用?

为啥 C# 的 onClick 事件在表标签的 <td> 中不起作用

为啥按 count(lab_results.testid) desc 排序在 C# 中不起作用 - 但在 SQL Server 中很好?

为啥 flex 属性在反应样式的组件中不起作用?

为啥媒体查询在 Angular8 中不起作用

为啥 FileSearch 元素的 MinVersion 属性在我的 WiX 安装程序中不起作用?