找回密码
 FreeOZ用户注册
查看: 2465|回复: 18
打印 上一主题 下一主题

[论坛技术] c# what's the point

[复制链接]
跳转到指定楼层
1#
发表于 19-11-2010 16:25:11 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?FreeOZ用户注册

x
String[] myArr = (String[]) myAL.ToArray( typeof( string ) );

都 typeof( string ) 了
还(String[])!!!
有意思吗?

实在是喜欢不起来C#
回复  

使用道具 举报

2#
发表于 19-11-2010 16:28:04 | 只看该作者
不喜欢强制类型转换的话,你可以用泛型来把这个代码搞得更漂亮点。
回复  

使用道具 举报

3#
 楼主| 发表于 19-11-2010 16:31:48 | 只看该作者
我没意见强制类型转化。
问题是我都告诉我要 string 的type 了,还要我强制类型转换,就有点说不过去了
回复  

使用道具 举报

4#
发表于 19-11-2010 16:54:44 | 只看该作者
ArrayList 不是 Generic 所以只能转换成Array.
C# 2.0以后就有Generic了,楼主用的版本也太低了吧?
回复  

使用道具 举报

5#
 楼主| 发表于 19-11-2010 17:11:36 | 只看该作者

不是版本低,我在改一些老的code。做接口,没办法
回复  

使用道具 举报

6#
发表于 19-11-2010 17:35:17 | 只看该作者
原帖由 lufumin1832 于 19-11-2010 16:31 发表
我没意见强制类型转化。
问题是我都告诉我要 string 的type 了,还要我强制类型转换,就有点说不过去了


还是说得过去。 对于编译器而言,你虽然往myAL.ToArray传入了一个string[]类型,但因为ToArray的返回类型是Array, 所以还是必须强制转换类型才能赋值给String[] myArr。
所有类型安全的语言都是这么做的,不然怎么能做到类型安全?

评分

参与人数 1威望 +50 收起 理由
coredump + 50 我很赞同!

查看全部评分

回复  

使用道具 举报

7#
发表于 19-11-2010 17:41:28 | 只看该作者
原帖由 woodheadz 于 19-11-2010 16:35 发表


还是说得过去。 对于编译器而言,你虽然往myAL.ToArray传入了一个string[]类型,但因为ToArray的返回类型是Array, 所以还是必须强制转换类型才能赋值给String[] myArr。
所有类型安全的语言都是这么做的,不然怎 ...
想happy也就只能范型了。
回复  

使用道具 举报

8#
发表于 20-11-2010 12:12:10 | 只看该作者
ToArray的返回不知道你的类型,你需要自己转型,请使用下面的语句转。
String[] myArr =  myAL.ToArray( typeof( string ) ) as String[];

请问你的VS和。net运行环境是什么版本,不要泛型吗?2.0就出来了。
回复  

使用道具 举报

9#
发表于 21-11-2010 23:14:42 | 只看该作者
一个装水果的篮子不会是一个装苹果的篮子,因为水果篮子可能装了各种不同的水果而苹果篮子只能装苹果。
回复  

使用道具 举报

10#
 楼主| 发表于 22-11-2010 09:05:50 | 只看该作者
PHP也不需要强制类型转化,java需要,因为java是强类型的。
c#是强类型的吗?可以说是,也可以说不是,一个四部像的产物。

尤其是我一个初学者,我只能根据documentation.
http://msdn.microsoft.com/en-us/library/aa317792%28v=VS.71%29.as
其中  
type
    Type: System.Type
    The element Type of the destination array to create and copy elements to.

Return Value
Type: System.Array
An array of the specified element type containing copies of the elements of the ArrayList.

还用我翻译吗???
回复  

使用道具 举报

11#
发表于 22-11-2010 10:15:38 | 只看该作者
原帖由 lufumin1832 于 22-11-2010 09:05 发表
PHP也不需要强制类型转化,java需要,因为java是强类型的。
c#是强类型的吗?可以说是,也可以说不是,一个四部像的产物。

尤其是我一个初学者,我只能根据documentation.
http://msdn.microsoft.com/en-us/lib ...

C#当然是强类型语言。 不太能理解所谓的四不像指的是什么呢?
回复  

使用道具 举报

12#
 楼主| 发表于 22-11-2010 10:52:00 | 只看该作者
原帖由 woodheadz 于 22-11-2010 10:15 发表

C#当然是强类型语言。 不太能理解所谓的四不像指的是什么呢?

C#不是“绝对”的强类型语言,因为它也有弱类型,那就是Object。我们知道Object是所有类型的最终基类,任何类型的对象都可以使用Object来引用。可是一旦转化成Object的变量之后,代码提示便消失了;即使我们“明确”对象的确切类型,也必须通过Cast才能使用——更何况它形成了一种被 “滥用”或“误用”的机会。例如一段错误代码可能会传入一个不符合约定类型的对象,那么就会造成错误。更严重的是,这样的错误可能只要在“运行时”才能被发现,编译器对此无能为
回复  

使用道具 举报

13#
发表于 22-11-2010 11:27:40 | 只看该作者
原帖由 lufumin1832 于 22-11-2010 10:52 发表

C#不是“绝对”的强类型语言,因为它也有弱类型,那就是Object。我们知道Object是所有类型的最终基类,任何类型的对象都可以使用Object来引用。可是一旦转化成Object的变量之后,代码提示便消失了;即使我们“明确 ...


老兄,你这个概念就有问题了。 Java也有Object类型,C++还有void*, 你不能因此就说他们就不是强类型语言是吧。
从程序语言的概念上讲,无论是何种对象,都可以算是是对系统计算的客观真实对象在软件系统内的一个投影。基于这个认识,程序语言就必须提供一个能够指向到任何类型的“object”类型,因为既然你把一个东西归为莫一种特定的类型,那么这个东西就自然具备了前面说的“对象”的含义。没有object类型,就无法做到概念完整。
你说的这个问题确实存在,它只有通过设计技巧和泛型来解决。 强类型语言设计人员很重要的技能之一就是最大限度的利用编译器的类型安全检查功能,尽量降低类型转换失败的可能性。

评分

参与人数 1威望 +50 收起 理由
coredump + 50 我很赞同!

查看全部评分

回复  

使用道具 举报

14#
 楼主| 发表于 22-11-2010 12:51:50 | 只看该作者
原帖由 woodheadz 于 22-11-2010 11:27 发表


老兄,你这个概念就有问题了。 Java也有Object类型,C++还有void*, 你不能因此就说他们就不是强类型语言是吧。
从程序语言的概念上讲,无论是何种对象,都可以算是是对系统计算的客观真实对象在软件系统内的一个 ...

java的object 和c# 能一样吗?
3.5 新加的object 是弱类型吧
回复  

使用道具 举报

15#
发表于 22-11-2010 13:06:58 | 只看该作者
原帖由 lufumin1832 于 22-11-2010 12:51 发表

java的object 和c# 能一样吗?
3.5 新加的object 是弱类型吧

在类型转换方面,java的和C#有什么不一样呢?
你说的3.5新加的object是指可以用var来定义变量是吧? 这个其实只是编译器耍的一个小trick,编译器会自动把var替换成该变量第一次被赋值的类型。所以用var定义的变量一样有代码提示。 也因此,var不能用在顺序无关的上下文情况下,比如你就不能用var去定义一个类成员变量。
var一样是类型安全的,比如你用var定义了一个变量赋值为A类型,接下来你就不能再把B类型赋值给这个变量了(除非B是A的子类)
回复  

使用道具 举报

16#
 楼主| 发表于 22-11-2010 13:18:58 | 只看该作者
原帖由 woodheadz 于 22-11-2010 13:06 发表

在类型转换方面,java的和C#有什么不一样呢?
你说的3.5新加的object是指可以用var来定义变量是吧? 这个其实只是编译器耍的一个小trick,编译器会自动把var替换成该变量第一次被赋值的类型。所以用var定义的变量一 ...

是的。不明白,既然是强类型,加这个弱类型干嘛?
回复  

使用道具 举报

17#
发表于 22-11-2010 13:26:23 | 只看该作者
原帖由 lufumin1832 于 22-11-2010 13:18 发表

是的。不明白,既然是强类型,加这个弱类型干嘛?


其实并不存在var这么一种类型,只是编译器的花招让我们看起来有这么一个类型而已。 加这个东西的目的就是方便程序员。
我现在还挺喜欢用这个var的,很方便,而且又不会因之引起什么错误
回复  

使用道具 举报

18#
发表于 22-11-2010 13:35:34 | 只看该作者
原帖由 woodheadz 于 22-11-2010 12:06 发表

在类型转换方面,java的和C#有什么不一样呢?
你说的3.5新加的object是指可以用var来定义变量是吧? 这个其实只是编译器耍的一个小trick,编译器会自动把var替换成该变量第一次被赋值的类型。所以用var定义的变量一 ...
和C++0x的auto类型一样的,编译器自己推断,是个语法糖。
回复  

使用道具 举报

19#
发表于 28-11-2010 18:07:33 | 只看该作者
仅仅谈语言而谈语言,有意义么? 选择合适的语言应用于合适的项目才是合理的吧?
回复  

使用道具 举报

您需要登录后才可以回帖 登录 | FreeOZ用户注册

本版积分规则

小黑屋|手机版|Archiver|FreeOZ论坛

GMT+11, 27-11-2024 19:27 , Processed in 0.050521 second(s), 36 queries , Gzip On, Redis On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表