首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >一个类对象-没有错误吗?

一个类对象-没有错误吗?
EN

Stack Overflow用户
提问于 2013-09-03 06:18:46
回答 2查看 185关注 0票数 0

也许我会把拳击和拳击搞混。

请考虑MSDN中的以下语句:

“取消装箱是从类型对象到值类型或从接口类型到实现接口的值类型的显式转换。”

因此,这意味着取消装箱只能应用于值类型参数。

所以,这没什么。

代码语言:javascript
复制
var concernedInteger = (int)myObject; //unboxing is ok.

因为类是引用类型,所以这不应该有效(因为取消装箱只适用于值类型)

代码语言:javascript
复制
var concernedClassObject = (TestClass)testClassObject // unboxing is still ok.

我的ReSharper没有显示任何错误。

所以,我的问题是,“当MSDN说只有值类型可以取消装箱时,如何才能打开引用类型变量”?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-09-03 06:21:13

这不是解除拳击。是type casting

取消装箱是将引用中的值提取到值类型中(假设转换成功)。当你像这样移动引用类型时..。这只是普通类型的铸造。

装箱和取消装箱无论如何都是type casting的类型。之所以给它们起特殊的名称(装箱和取消装箱),是因为在托管环境中发生了更多的事情,而不仅仅是对两个查找表进行了更改。这就是为什么它们被分隔为术语装箱和取消装箱的值类型。但是当提到引用类型时..。只是典型的演员。

票数 8
EN

Stack Overflow用户

发布于 2013-09-03 06:30:18

您在这里所做的是TypeCasting,而不是装箱/取消装箱。但是,同样的转换语法用于取消装箱和显式引用转换。

Boxing和UnBoxing:

当您在引用类型(基本上是对象)之间转换值类型时,Boxingunboxing起作用

一个简单的boxingunboxing示例如下

代码语言:javascript
复制
             int i=1;
             object o=i; /// This is boxing
             int j = (int)o; /// This is unboxing

TypeCasting:

类型转换会导致转换。类型强制转换执行表达式到给定类型的显式转换。

代码语言:javascript
复制
(type) expression

expression转换为type类型的对象。让我们考虑一下例子

代码语言:javascript
复制
 long _longval = 1;
 int i = (int)_longval

显式转换实际上告诉编译器我们知道可能的信息丢失,但仍然需要执行强制转换。对于内置的数字类型来说,这是可以的,但是在引用类型中,它完全不是兼容的.for示例。

代码语言:javascript
复制
  string _mystring="abc";
  int i=(int)_mystring;

这样的转换表达式将成功编译,但在运行时会失败,从而导致InvalidCastException错误。

使用As关键字:

示例

代码语言:javascript
复制
  MyClass _MyObject = (MyClass ) obj;
  MyClass MyObject = obj as MyClass ;

当第一行代码转换失败时,抛出一个异常,而在第二行中,您只能获得 value.Also,您可以只在引用类型中使用as,因此对于值类型,您只能使用普通的强制转换方法。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18585396

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档