类型转换和类型转换之间的区别?

时间:2010-09-22 15:06:01

标签: .net c#-4.0

  

可能重复:
  What is the difference between casting and conversion?

类型转换和类型转换之间的区别? 如果你通过一个例子来做它会更好。

3 个答案:

答案 0 :(得分:10)

首先,这是

的副本

What is the difference between casting and conversion?

受到

的启发

What is the (type) in (type)objectname.var

我会首先阅读这些内容,然后再回到这个简短的摘要中。

我建议您参阅规范第6章的第一段,其中指出:

  

转换可启用表达式   被视为特定的   类型。转换可能会导致   给定类型的表达式   被视为具有不同类型,或   它可能导致没有a的表达   键入以获取类型。转换可以   隐式或显式,这个   确定是否显式转换   需要。例如,转换   从类型int到类型long是   隐式,所以int类型的表达式   可以隐含地被视为类型   长。相反的转换,来自   输入long类型为int,是显式的   所以需要明确的演员表。

我们从中学到了什么?

  • 转换是两个操作数上的语义操作表达式类型

  • 语义分析确定的确切操作决定了实际值在运行时的转换方式。

  • 强制转换(type)expression形式的C#语言的语法元素,它明确地引发转换从表达到类型。

这些只是您可以在C#中执行的一些隐式转换:

short aa = 123;      // numeric constant conversion from int to short
int bb = aa;         // numeric conversion from short to int
int? cc = null;      // nullable conversion from null literal to nullable int.
object dd = "hello"; // implicit reference conversion from string to object
IEnumerable<Giraffe> ee = new Giraffe[] { new Giraffe() } ;
                     // implicit reference conversion from array to sequence
IEnumerable<Animal> ff = ee; 
                     // implicit reference conversion involving array covariance
ff = null;           // implicit reference conversion from null literal to sequence
bb = 456;            // implicit identity conversion from int to int
dd = bb;             // implicit boxing conversion from int to object
Func<int, int> gg = x=>x+x; 
                     // anonymous function to delegate type conversion 

明确的转换通常(但并非总是如此)需要强制转换:

aa = (short)bb;      // explicit numeric conversion
string hh = (string)dd; //explicit reference conversion

等等。

legal 使用强制转换进行隐式转换,但通常不需要。

这是清楚的吗?关键点在于转换是一种语义操作,它导致在运行时的动作一个演员是一个语法元素,告诉编译器分析一个转换使用显式转换分析规则

如果转换逻辑的主题让您感兴趣,那么您可能会对我关于此主题的文章感兴趣,这些文章位于:

http://blogs.msdn.com/b/ericlippert/archive/tags/conversions/

答案 1 :(得分:2)

转换=实际上将对象转换为不同类的实例 例如:

int i = 3; 
string str = i.ToString();

将整数转换为字符串

Casting =强制对象的类型,因为你不仅仅知道编译器 例如:

object obj = 3;
int i = (int)obj;

答案 2 :(得分:0)

Here是一个很好的主题,其中包含一些示例和问题的答案。