【发布时间】:2013-10-30 03:16:49
【问题描述】:
我想知道 C# 中的 C++ 的 reinterpret_cast 的等价物是什么!?
这是我的示例:
class Base
{
protected int counter = 0;
}
class Foo : Base
{
public int Counter
{
get { return counter; }
}
}
Base b = new Base();
Foo f = b as Foo; // f will be null
我不反对为什么f 会为空,因为它应该是。但如果是 C++,我本可以编写 Foo f = reinterpret_cast<Foo>(b); 并得到我想要的。在 C# 中我可以做些什么来实现同样的目标?
附言。我假设Base 和Foo 在数据方面是一致的。
[更新]
这是一个简单的场景,reinterpret_cast 可能会有所帮助:
考虑编写一个 XXX-RPC 库,您无法控制传入的参数,也无法控制要调用的服务的签名。您的库应该使用给定的参数调用请求的服务。如果 C# 支持reinterpret_cast,我可以简单地将reinterpret_cast 给定的参数转换为预期的参数并调用服务。
【问题讨论】:
-
@JLott,没用。
C#比C++更安全。 -
@JLott 我读过那篇文章,但它与我的要求完全不同。
-
@DmitryLedentsov AFAIK RPC 库通过序列化和反序列化实现这一点,使用字符串作为中间媒介。
-
可以将字符串视为字节序列,因此通过自然的类比,您可以将字符串重新解释为对象。 c++ - 比如
reinterpret_cast本质上是不安全的,因为你很难说它是否工作正常。通过使用序列化(二进制,如果您需要一个紧凑的序列化),您可以获得对 filure 的细粒度控制,特别是对部分故障的控制。正如其他评论者所注意到的,.Net 类型系统应该是安全的 :)
标签: c# reinterpret-cast