2013-03-12 92 views
3

有兩個項目,一個C++ CLI與另一個C#項目。
在C#項目中引用C++ CLI程序集。爲什麼C++ CLI索引屬性在C#中不起作用?

一切都很好,除了索引屬性不起作用。
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(..) 

這是一個錯誤?有沒有解決這個問題的方法?爲什麼發生這一切?

+0

>使用該主叫機制,但很少不安全。 System.Diagnostics.Process process = new System.Diagnostics.Process(); process.StartInfo.FileName =「App.exe」; process.StartInfo.Arguments =「arg1 arg2 arg3」;的Process.Start(); – XEENA 2013-03-12 11:04:04

+0

我寫了一篇關於在將VB.NET應用程序轉換爲C#時創建的類的博客文章,它可能對您有用。 [PropertyWrapper](http://4a47.blogspot.se/2013/03/propertywrapper.html) – 2013-03-12 12:17:24

+0

@JensGranlund有用,謝謝 – 2013-03-12 12:28:25

回答

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; 
     } 
    } 
}; 
+0

感謝您使用這種方式。我已經將我的屬性移植到類中。 – 2013-03-12 14:41:52

3

C#不支持索引屬性,除了this屬性。

然而,.NET框架的確如此,所以當用支持它的語言創建索引屬性時,它會在C#中變成一個get_Method和一個。

+0

有沒有解決方案來解決這個問題? – 2013-03-12 10:31:31

+3

@Mahdi,這取決於你的意思是修復。只要您正在訪問由另一種語言編號創建的C#中的索引屬性。但是你可以通過用一個對象創建一個屬性並使用索引該屬性的對象來僞造C#中的索引屬性。 – 2013-03-12 10:37:06

相關問題