可能重复:
What is the difference between casting and conversion?
类型转换和类型转换之间的区别? 如果你通过一个例子来做它会更好。
答案 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是一个很好的主题,其中包含一些示例和问题的答案。