Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/30.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 用户定义的值类型与本机值类型一样具有类型转换_.net_C++ Cli - Fatal编程技术网

.net 用户定义的值类型与本机值类型一样具有类型转换

.net 用户定义的值类型与本机值类型一样具有类型转换,.net,c++-cli,.net,C++ Cli,我的要求是获取一个对象的内容并将其强制为不同的类型。实际上,内容是指向本地C++类的指针,而点网对象是允许点网访问C++的包装器。因此,同一个C++对象可能有不同的包装器,这取决于您正在访问的继承层次结构中的哪个类。这些包装器没有继承关系 在VB.net中我可以写 Dim s1 As Short = 13 Dim l1 As Long = s1 现在我想写, Dim v1 As ValueTest1 = New ValueTest1(13) Dim v2 As ValueTest2 = v1

我的要求是获取一个对象的内容并将其强制为不同的类型。实际上,内容是指向本地C++类的指针,而点网对象是允许点网访问C++的包装器。因此,同一个C++对象可能有不同的包装器,这取决于您正在访问的继承层次结构中的哪个类。这些包装器没有继承关系

在VB.net中我可以写

Dim s1 As Short = 13
Dim l1 As Long = s1
现在我想写,

Dim v1 As ValueTest1 = New ValueTest1(13)
Dim v2 As ValueTest2 = v1
其中,ValueTest1和ValueTest2在C++/CLI中定义为值类型。因此,我在ValueTest1上有一个构造函数,它接受ValueTest2,但编译器仍然不支持从ValueTest1到ValueTest2的类型强制

令人沮丧

关于如何使其进行隐式转换,有什么建议吗

好的,操作符的使用是有效的,但是在使用对象时还有一个问题

Dim v1 As ValueTest1 = New ValueTest1(13)
Dim v2 As ValueTest2 = v1 ' OK
Dim o1 As Object = v1
Dim v3 As ValueTest2 = o1 ' fails with the exception below
测试_xxxxx.dll中发生类型为“System.InvalidCastException”的第一次意外异常


其他信息:指定的强制转换无效。

您可以自己定义显式或隐式转换运算符

// without keyword 'explicit', it's an implicit conversion operator
static operator ValueTest1 ( ValueTest2 two )
{
    ValueTest1 one(two.foo, two.bar);
    return one;
}

static explicit operator ValueTest2 ( ValueTest1 one )
{
    ValueTest2 two(one.foo, one.bar);
    return two;
}
有关更多信息,请参阅。该页主要关注从旧的托管扩展到C++到C++/CLI的迁移,但它确实给出了C++ C++中的转换运算符的语法。