可能重复:
What is the difference between casting and conversion?类型转换和类型转换之间的区别?
类型转换和类型转换之间的区别? II会更好,如果你用一个例子做吧..
可能重复:
What is the difference between casting and conversion?类型转换和类型转换之间的区别?
类型转换和类型转换之间的区别? II会更好,如果你用一个例子做吧..
首先,这是
What is the difference between casting and conversion?
重复这是由
What is the (type) in (type)objectname.var
启发我会读这些第一,然后回来这个小结。
我是指你本说明书中,其中规定的6章的第一段:
A转换能够 的表达式为是特定类型 的处理。 A转换可能会导致给定类型的 表达式被视为具有不同类型的 ,或 它可能会导致没有 类型的表达式获取类型。转换可以是隐式或显式 ,并且此 可确定是否需要明确转换为 。例如,从int类型到long类型的转换 隐含为 ,因此类型为int 的表达式可以隐式地被视为类型为 long。相反的转换(从 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
依此类推。
它是合法使用转换进行隐式转换,但通常不是必需的。
这是明确的吗?关键是转换是一个语义操作这导致在运行时的动作和cast是一个语法元素,它告诉编译器使用显式转换分析规则分析转换。
如果转换逻辑的主题感兴趣的内容,那么你可能有兴趣在我关于这个问题的文章,在这里:
http://blogs.msdn.com/b/ericlippert/archive/tags/conversions/
“显式转换通常但并非总是需要投射”:您可以举一个不需要投射的例子吗?关于我的头顶,我想不出任何... – 2010-09-23 23:11:48
@Thomas:foreach(动物中的长颈鹿)诱导了从动物到长颈鹿的明确转换,没有演员。字节b = 1; b + = 2;引发从int到byte的显式转换;这被分析为b =(字节)((int)b +(int)1))。作为用户定义的显式转换的转换可以在操作数的“任一侧”引入内置的显式转换;在这种情况下,我们确实在源代码中进行了强制转换,但它可以导致最多三次显式转换才能真正执行。 – 2010-09-23 23:39:02
也有一些不太明显的互操作场景,其中编译器会以您的名义插入从接口到类的显式转换。 – 2010-09-23 23:45:38
转换=实际转变的对象分成不同的类 前的一个实例:
int i = 3;
string str = i.ToString();
来变换一个整数转换成字符串
铸造=强制对象的类型,因为你知道的比编译器 前更多:
object obj = 3;
int i = (int)obj;
Here是一个很好的线索,提供一些例子和答案。
这是一门功课的问题吗? – 2010-09-22 15:08:49