C# 如何在CLR/托管C++;?
在.net中,CLR对象是所有类对象的基础,但不是基本类型(例如int、float等)。如何使用对象等基本类型? 比如说,你喜欢什么 例如:-C# 如何在CLR/托管C++;?,c#,clr,managed-c++,variant,C#,Clr,Managed C++,Variant,在.net中,CLR对象是所有类对象的基础,但不是基本类型(例如int、float等)。如何使用对象等基本类型? 比如说,你喜欢什么 例如:- 对象,通过装箱,是所有.NET类型的有效(根)基类。这应该可以正常工作-您只需要使用is或GetType()来检查类型 object[] varArray = new object[3]; varArray[0] = 3.141593F; varArray[1] = -1005; varArray[2] = "String"; 由于您提到您使用的是C+
对象
,通过装箱,是所有.NET类型的有效(根)基类。这应该可以正常工作-您只需要使用is
或GetType()
来检查类型
object[] varArray = new object[3];
varArray[0] = 3.141593F;
varArray[1] = -1005;
varArray[2] = "String";
由于您提到您使用的是C++/CLI,您应该能够执行以下操作:
array<Object^>^ varArray = gcnew array<Object^>(3);
varArray[0] = 3.141593;
varArray[1] = -1005;
varARray[2] = "String";
double val = *reinterpret_cast<double^>(varArray[0]);
array^varArray=gcnewarray(3);
varArray[0]=3.141593;
varArray[1]=-1005;
varARray[2]=“字符串”;
double val=*重新解释_cast(varArray[0]);
谢谢你的回答。我需要将我的返回值框起来,例如
Object ^ createFromString(String ^ value)
{
Int32 i( Convert::ToInt32(value) );
return static_cast< Object ^ >(i);
}
对象^createFromString(字符串^value)
{
int32i(Convert::ToInt32(value));
返回静态_cast
我需要通过强制转换到对象指针来框显返回值。直觉!:)
并检索为:
void writeValue(Object ^ value, BinaryWriter ^ strm)
{
Int32 i( *dynamic_cast< Int32 ^ >(value) );
strm->Write(i);
}
void writeValue(对象^value,二进制编写器^strm)
{
Int32 i(*动态转换(值));
strm->Write(i);
}
这是在.net 2.0中。我认为3.0更具动态性,所以这可能是有可能的,但我只有VS2005,它不能使用.NET3.0。C#3.0是你所想的,它并不是真的更具动态性。您看到的“var”关键字并没有创建变体,只创建推断类型。var i=1;仍然使“i”成为int。@Nick:3.0与2.0相比没有更大的动态性;C#3.0有“var”,但那不是“variant”——它是“variant”,意思是“自动推断类型”。它仍然是静态类型的。C 4引入了“动态”抱歉,我实际上必须在托管C++中这样做。我实际上使用的是托管C++,而这并没有编译。我认为在C#中任何可能的东西在MC++中都应该是可能的?谢谢。我没有正确的语法来返回托管C++中的装箱值。是的,这是我的错。我有一个使用MC++库的c#GUI,我需要在这两个库中执行相同的操作,但我无法获得适用于MC++的正确语法。
Object ^ createFromString(String ^ value)
{
Int32 i( Convert::ToInt32(value) );
return static_cast< Object ^ >(i);
}
void writeValue(Object ^ value, BinaryWriter ^ strm)
{
Int32 i( *dynamic_cast< Int32 ^ >(value) );
strm->Write(i);
}