纯粹调查——大家认为C#比VB.net强在哪里

Ninputer 2004-01-27 06:58:59
我只是想做一个调查,决不是挑起语言争端。我的调查结果将来会成为一篇报告的一部分。
大家可以从任何方面论述,欢迎技术角度的,多少不限。
最好个说个的,这样便于我收集数据。
回者有分!谢谢大家合作。
...全文
555 50 打赏 收藏 举报
写回复
50 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
cmlr_ 2010-06-21
[Quote=引用 48 楼 commandown 的回复:]

vb.net: 微软没有公布任何比 c#.net差的官方言论,因为VB.net在语言上虽然没有C#.NET简洁明了,但并不存在有什么缺陷;
没有可可靠的事实证明VB.NET 比 C#.NET 速度慢,理论上应该速度是一样的,因为都要编译成中间语言,包括C++.NET在内,速度都是一样的!

唯一的一点不同是,C#可以通过不安全代码模式来进行指针操作,在有些特殊的……
[/Quote]
恐怕指针操作的确是VB不如C#的地方,VB不是很擅长操作指针
  • 打赏
  • 举报
回复
cmlr_ 2010-06-21
我是从来不认为c#比VB>NET强大的,C系语言许多功能在.net中都是从vb里模仿的,就如很简单的
Foreach循环,可选参数等等,有些确实十分实用
  • 打赏
  • 举报
回复
commandown 2004-01-30
vb.net: 微软没有公布任何比 c#.net差的官方言论,因为VB.net在语言上虽然没有C#.NET简洁明了,但并不存在有什么缺陷;
没有可可靠的事实证明VB.NET 比 C#.NET 速度慢,理论上应该速度是一样的,因为都要编译成中间语言,包括C++.NET在内,速度都是一样的!

唯一的一点不同是,C#可以通过不安全代码模式来进行指针操作,在有些特殊的情况下,这是必须要用到的。VB.NET没有能力做到.

个人观点
  • 打赏
  • 举报
回复
karykwan 2004-01-29
楼上的兄弟们真的够恨。。。。。强
  • 打赏
  • 举报
回复
NEODIO 2004-01-29
区别是有的,但要说C#强VB.NET哪里我还真说不出来,两门语言都遵守公共语言规范,都只

是其一个子集而已,要说功能都比不上IL ASM,语言是死的,人是活的,你用C#比VB熟练,

那么C#对于你来说就比VB强,反之亦然。
  • 打赏
  • 举报
回复
sumtec 2004-01-29
to ajqc(失眠无神闷坐中) :

嗬嗬!我用过的语言就多了。
Basic全系列:Basic/Basica/GWBasic
QB/QB pro 7.1/VB for Dos 1.0
VB for Win 1/2/3/4/5/6/7.1
  • 打赏
  • 举报
回复
ydtime 2004-01-29
1、c#是.NET中的主流语言,.NET的核心库是用C#开发的
2、c#语言与c/c++、java更相似,便于学习该两种语言的人较快的转过来
3、c#规范已作为一种标准提交欧洲什么标准组织
  • 打赏
  • 举报
回复
hmjwdmh 2004-01-29
在我们这不是想用什么语言就用什么语言,什么语言都得学!
目前用以下语言开发过项目:
Delphi6
VB6.0
C#
真是痛苦。

  • 打赏
  • 举报
回复
DangerousWang 2004-01-29
c#还不成熟,以后将做得更好,比如支持范型等。

  • 打赏
  • 举报
回复
ghostboy1020 2004-01-29
C#多少是最新的语言用起来爽
  • 打赏
  • 举报
回复
zjh135 2004-01-29
Visual Basic是微软的老牌语言,发展到Visual Basic.net已经经历了巨大的变化。现在Visual Basic.net是微软认定的“最高效”的语言。的确,Visual Basic.net保持了易懂的风格,加上IDE中无人能比得及时语法更正和最强的智能感知,它的确可以称得上.net中的开发快手。微软将Visual Basic.net定义为高效的语言,就不希望它过于复杂,始终能被用户高效使用是它的宗旨,但同时也因为缺少一些高级的用法而被C#等语言的用户看不起。而在即将推出的Visual Studio.net Whidbey中,Visual Basic一改以前的作风,大量较为深入的特征加入了Visual Basic.net,如泛型、运算符重载等,难道微软想让Visual Basic成为一种复杂高深的语言?不过,在浏览了这些特征以后,我得到一个结论,那就是Visual Basic得到这些高级的语言特征之后,仍然保持着简明易懂和快速开发的优良特点,看来这次升级会给古老的Visual Basic带来新的生机。



一、Of语句和泛型



新一带的.net Framework会带有泛型功能,这是大家都知道的。所以我根本不为VB是否带有泛型担心,若VB不带有泛型,那么怎么使用由C#创建的泛型代码呢?VB在处理模板上提供了Of语句:



Public Class TestGeneric(Of T)

Private mItem As T

Public Function GetItem() As T

Return Me.mItem

End Function

End Class



这里用Of语句创建了一模板T,这是一个未定类型,在使用时,我们可以用Of语句指定特定的类型,如:



Dim obj As TestGeneric(Of Int32)

Dim i As Int32 = obj.GetItem()



这里的Of语句给模板指定了类型System.Int32,于是TestGeneric内部的类型T完全变成了整数。这都是由编译器自动完成的。除了类型可以使用模板,方法也可以使用模板,如:

Public Sub Swap(Of T)(ByRef A As T, ByRef B As T)

使用的时候也可以和刚才的语法一样:



Dim x, y As String

x = “A” : y = “B”

Swap(Of String)(x, y)



就如同Swap子程序从一开始就是定义为String类型一样!有了泛型,我们可以创建既高效又有很强复用性的代码,而且其强类型的特征也为输入代码提供了方便——智能感知可以及时判断模板的真正类型从而提供代码自动完成。



二、运算符重载



为了支持CLS,Visual Basic.net以前既不支持运算符重载的定义,也不允许使用其他语言重载的运算符。如C#可以方便地进行如下操作:



UInt32 a, b;

bool f = a == b;



而与之完全对等的VB.net语句则要写成:



Dim a, b As UInt32

Dim f As Boolean = UInt32.op_Equality(a, b)



虽然运算符重载不符合CLS,但连使用的机会都不给VB程序员显得太残酷了。现在Whidbey版的Visual Basic.net不但能够使用重载的运算符,还能自己重载运算符。能重载的运算符包括一元运算符+、-、Not、IsTrue、IsFalse、Widening、Narrowing;二元运算符+、-、*、/、\、&、Like、Mod 、And、Or、Xo、^、<<、>>、=、<、<>、<、>=、<=等。重载时的语法与子程序和函数类似,使用的是Operator语句,如实现一个复数结构的加法:



Shared Operator +(ByVal c1 As Complex, ByVal c2 As Complex) As Complex

Return New Complex(c1.Real + c2.Real, c1.Imaginary + c2.Imaginary)

End Operator



使用运算符重载可以使程序简洁化,你现在可以用一个清晰的运算符代替原来多重嵌套的函数调用了。



三、无符号整型和SByte



无符号整型,包括UInteger,UShort和ULong,加上有符号的SByte,现在都受Visual Basic.net的支持,UInteger是32位无符号整型,字面量符号是UI;UShort是16位无符号整型,字面量符号是US;ULong是无符号64位整型,字面量符号是UL;SByte是8位有符号整型。有了无符号整型,Visual Basic就可以更容易地创建从IConvertible等接口派生的类型,而不用担心VB中没有处理这些类型的方法。同时VB也可以利用这些类型完成更多位运算,这在图形编程中很重要。

Visual Basic.net还提供了直接转换无符号类型的运算符,他们是CUInt、CULong和CUShort。你可以这样使用无符号整数:



Dim ui As UInteger = 123UI

Dim ul As ULong = 2147483648UL

Dim us As UShort = CUShort(ui)



四、Continue语句



VB有很强大的循环语句,其Do循环、For循环和While循环都被程序员广泛使用者。但是VB的循环语句缺少跳入下一轮循环的功能,有时我们不得不使用GoTo语句,如



For i As Ingeger = 1 To 100

If i Mod 2 = 0 Then GoTo _Next

Odds.Add(i)

_Next:

Next



现在,Visual Basic.net可以使用Continue语句方便地跳入下一轮循环:



For i As Ingeger = 1 To 100

If i Mod 2 = 0 Then Continue For

Odds.Add(i)

Next



而且Continue语句还可以接For、Do或While,这方便了我们使用循环嵌套的情况。很早以前程序员就希望VB有Continue这样的语句,如今Whidbey终于实现了我们的愿望。



五、“我的命名空间”——My命名空间



My命名空间是Visual Basic.net中一个相当体贴的设计,My命名空间就像是用namespace语句创建的命名空间一样,但其实是一个包含很多称手工具的虚拟命名空间。My命名空间实际上指向.net Framework类库的各个角落,把最常用的系统或工作环境的信息提供给你。主要包括:

My.Application提供了当前程序运行环境,如程序集的标题、版本号、运行目录等。

My.Computer提供了平台和硬件的信息,如访问注册表、打印机、键盘、屏幕等。

My.User提供了当前用户显示的名称,用户域等信息。

My.WebServices提供了已经引用的WebService的信息,可以让你快速访问WebService。

My.Forms提供了当前工程中的全部窗体,你可以从这里快速创建它们的实例。

看!多么方便的功能,只要轻松输入My,“我的命名空间”马上展示给你。这可是Visual Basic.net的独门兵器,其他语言的用户可没法享受到。



六、Using块



用过C#的人都熟悉,using块是用来让.net程序自动调用对象的Dispose方法的工具。现在Visual Basic.net也具有这项功能,只要对象是在Using块中定义的,那么对象使用完毕后会被自动调用Dispose()方法释放内存,当然对象必须要实现IDisposable接口。如:



Using songFont As New Font(“宋体”, 12F)

txtFont.Text = songFont

End Using



看了Visual Basic.net即将具有的新功能,你是不是觉得Visual Basic.net具有了这些强大功能后还保持着它原有的方便、易懂与高效呢?看来微软的精心设计的确使Visual Basic变成了一个“复杂而高效”的语言。

  • 打赏
  • 举报
回复
afeicn 2004-01-29
用c或c++习惯了,转到c#比较简单,我感觉vb代码太麻烦,可能是我不经常用吧
  • 打赏
  • 举报
回复
01101230 2004-01-29
呵呵,也不说什么C#好VB差,搞VBDOTNET的人只要你自己觉得OO过关就可以了。不是什么偏见,搞VB的80%以上OO都不行。我就见过一间公司,原来是搞VB的也很出色,后来他们做ERP,新的技术总监来了,十二个VB程序员全部被换成JAVA的,当然他们产品现在已经比较成熟了。
  • 打赏
  • 举报
回复
Hexudong1979 2004-01-29
青菜萝卜,各有所好
学自己所想学吧
没有根本的弱者和强者
努力了,钻研了,什么事都可以解决
三百六十行,行行出状元
我始终相信:
诚实,努力,坚持
  • 打赏
  • 举报
回复
Ninputer 2004-01-29
(结题话:看来大家对VB.net了解真少啊,完全不如VB.net版,为什么不了解却要安插许多不存在的功能缺陷呢?)
  • 打赏
  • 举报
回复
Ninputer 2004-01-29
好了,谢谢大家,我已经收集到足够的数据,现在给分
  • 打赏
  • 举报
回复
lbhqu 2004-01-29
c#是.net的默认语言 所以能支持.net所有的组件 vb.net不一定能使用所有的组件 能实现比vb.net更多的功能
  • 打赏
  • 举报
回复
qingenerp 2004-01-29
路过路过路过路过路过路过路过路过路过路过路过路过█████████路过路过
路过路过路过路过路过路过路过路过路过███████████████路过路过
路过路过路过路过路过路过路过无██████████████████路过路过
路过路过路过路过路过无████████████████路过路过路过路过路过
路过路过路过路过███████无███路过█████路过路过路过路过路过无
路过无████████████路过路过路过████路过路过路过路过路过路过
无██████████████路过路过路过████路过路过路过路过路过路过
无████████████路过路过路过无███████████路过路过路过
无████████████路过路过路过██████████████路过路过
路过██████████路过路过无██████路过无███████路过路过
路过路过路过路过████路过路过无████路过路过路过█████路过路过无
路过路过路过路过████路过路过████路过██路过无█████路过路过无
路过路过路过路过████路过路过████路过████无█████路过路过无
路过路过路过路过████路过路过████路过████无█████路过路过无
路过路过路过路过████路过路过████路过███路过█████路过路过无
路过路过路过路过████路过路过████路过███路过█████路过路过无
路过路过路过路过████路过路过████无████路过█████路过路过无
路过路过路过路过████路过路过████无████路过█████路过路过无
路过路过路过路过████路过路过████无████路过█████路过路过无
路过路过路过路过████路过路过████无████路过█████路过路过无
路过路过路过路过████路过路过███路过████路过█████路过路过无
路过██路过无█████路过路过███路过███路过无█████路过路过无
路过██████████路过路过无██路过██路过路过█████路过路过无
路过无█████████路过路过路过路过███路过路过无████路过路过无
路过路过无███████路过路过路过路过███无████路过路过路过路过无
路过路过路过██████路过路过路过无████路过█████路过路过路过无
路过路过路过路过无███路过路过路过█████路过无███████路过路过
路过路过路过路过路过路过路过路过██████路过路过无██████路过路过
路过路过路过路过路过路过路过无██████路过路过路过███████路过无
路过路过路过路过路过路过路过█████路过路过路过路过无██████路过无
路过路过路过路过路过路过无█████路过路过路过路过路过无████路过路过
路过路过路过路过路过路过███路过路过路过路过路过路过路过无███路过路过
  • 打赏
  • 举报
回复
ajqc 2004-01-29
看来sumtec(Psydian)是铁了心要用VB了.其实一个人习惯了,就知道区别了.大家用VS的用途和用法不一样,遇到的BUG不尽然.我从不想报告任何一个BUG,有我自己的想法,透明图的问题,也许是你的应用中不会遇到,你才轻描淡写地跳过.效率问题.你倒是好说,让我花多点脑汁来使VB和C#一样快.你也不想想,我就是懒,才学.NET的.入门时就对比过了,还是C#好学方便.你没怎么点过属性窗口的 上闪电标记吧.搞到要手工加事件声明,真佩服你的耐心!
Dim aa() As Text = {textBox1, textBox2}
你先试试行不行再说哈,textBox和Text是2回事.VB中是能声明,但要打的代码多,不好记!C#的简单,好记!
我说的代码,你都没试,全是跳过去了,看来你是愚忠的人.不敢于去试.MP3的问题,是VS的问题,也许是我才256内存,在WIN2003才会有这BUG吧.
我想公开地说的就是.自己想做什么,就做什么,想用什么就用什么,别人说什么就让别人说去,但无论你的选择是什么,都有苦头让你吃.路不可能是平坦的,但是作为过来人.你若问我.我走这条路,我遇到了什么,我会这样告诉你.但即使大家走的是同样的一条路.遇到的问题也不尽相同.
不管怎么说,呵呵.NET区的人都比JAVA区的人文明.
  • 打赏
  • 举报
回复
sumtec 2004-01-29
真郁闷,怎么现在拉滚动条会失去焦点?害得我两次按回车把没有完成的东西弄上去了!

to zjh135(aaa) :
w_rose(w_rose)已经分析得很好了。我再补充两句可以吗?

1、比较问题是不可能无条件的进行全局比较的。我问你梨和苹果哪个好?对吧。首先,总得有个前提条件和考虑的角度。其次,就算有了前提和角度,你也只能够进行局部的比较。
比如说强弱问题,确实C#在底层的支持比VB强一点,不说双面刃的问题,我可以举出上面说的Handles问题,还可以举出从早期代码移植稍微方便一点,还可以举出C#的类型检查过于严格的问题,还可以举出Module比class里面写无数个static方便的例子,还有在C#的class里面再写一个class智能提示不出来的问题,还有无法using到Module这一层的问题,还有在7.0的时候能通过调用get_xxx访问xxx属性的问题,而现在不能又引发代码层的兼容问题,等等。难道这些还不足以说明C#比VB差的地方吗?不!不足以!比较只能够是有条件有前提的局部比较。

3、这个理由完全不成立。如果从VB到C#难道就不会面对学OO的问题?如果说VB到C#要学OO,那么VB到VB.NET要学OO难道是件丑事?

4、这个w_rose(w_rose)说的不是很对。你会看到C#会在这方面做得越来越好,正如VB.NET也会在另一方面做得越来越好一样。

6、我和w_rose(w_rose)观点正好相反。VB.NET之前的VB简直就是不成样子了,有点像OO,但是实际上不是,非常的恶心。那是过去的错误,现在改正了是很正常的事情。看看Pascal改Delphi的时候,其实变动是非常大的,只是没有出现像VB这样的过渡时期,这种像OO而不是的时期,才没有引起叫骂。改动总会引起不适应的,而OO是目前的“最终目标”,往这里改有什么不对的?要不对也应该是VB1/2/3/4/5/6不对才是。

7、你就不要指望C#会比C++更强,那就不要指望了,甚至一致都不可能!——这是从功能丰富、编译出来的程序的运行速度以及能够接近底层的程度的角度讲的。反过来说,如果我们站在开发效率,抽象程度,可移植能力(现在实际上是受MS限制,看看Java的可移植性你就知道C#的可移植性可以达到一个什么样的程度),编译速度等方面看,C++就不能和C#比了。这些差别是由于设计语言的时候就有这些要求在里面,自然就会有这些差别。不要抱死一种语言,没什么好处,至少很多时候别的语言在某种情况下会更有优势,你不会就没得混。
  • 打赏
  • 举报
回复
加载更多回复(30)
相关推荐
发帖
C#

10.8w+

社区成员

.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
帖子事件
创建了帖子
2004-01-27 06:58
社区公告

让您成为最强悍的C#开发者