对.net 2.0失望啊失望啊失望啊失望啊失望啊

wylcy 2005-11-10 04:45:56
刚听到泛型啊(自以为能用上C++的模版功能了),操作符重载啊,类型转换重载啊,我是那个激动啊兴奋啊,心想.net的语法终于拨云见日可以和c++媲美啦。哪知道 一用才发现~~~~~~

写个类叫TestClass

Public Shared Widening Operator CType(ByVal tc As TestClass) As String
return "爽爽爽"
End Operator

--------------------------------------------------------------------------------------
做个测试
dim s as string
dim tc as new TestClass
s=tc

编译pass,执行pass
爽了一把

--------------------------------------------------------------------------------------
dim s as string
dim obj as object
dim tc as new new TestClass
obj=tc
s=obj

编译通过
执行
Unhandled Exception: System.InvalidCastException: Conversion from type 'TestClas
s' to type 'String' is not valid.
at Microsoft.VisualBasic.CompilerServices.Conversions.ToString(Object Value)

操!!Conversion from type 'TestClass' to type 'String' is not valid
明明可以转换,却说无法从TestClass转为String,睁眼说瞎话啊
--------------------------------------------------------------------------------------


受了一个小打击,算了,去那个被宣传的神乎其神的泛型上找点安慰吧
创建泛型函数
public sub ShowItem(of ItemType)(byval Item as ItemType)
dim s as string
s=item
console.writeline(s)
end sub

---------------------------------------------------------------------------------------
dim tc as new TestClass
ShowItem(tc)

编译:C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\a.vb(21) : error BC30311: Value of
type 'ItemType' cannot be converted to 'String'.

s=item
~~~~
晕,第一次玩就受打击,Value of type 'ItemType' cannot be converted to 'String'.看来想把不知类型的东东转化为某个类型是不可能的了,即使你重载了装换。

----------------------------------------------------------------------------------------


还是玩玩操作符重载吧

Public Shared Operator >(byval a as TestClass,byval b as TestClass) as Boolean
return true
end Operator


Public Shared Operator <(byval a as TestClass,byval b as TestClass) as Boolean
return false
end Operator

------------------------------------------------------------------------------------
因为受了刚才的打击,不敢随便玩泛型了
写个简单的
sub Test(byval a as object,b as object)
console.writeline(ctype(a,string))
end sub

dim a as new TestClass
dim b as new TestClass
Test(a,b)
编译pass,运行pass,不容易,那个操作重载的功能,看来还是有用的
--------------------------------------------------------------------------------------
被鼓励了一次,还是不能忘了那个泛型老大啊

public sub Test(of ItemType)(byval a as ItemType,byval b as ItemType)
console.writeline(a>b)
end sub

这种写法充分体现了模版语法的优势,你可以写个容器,里面放各种类型的东西,同时还可以对其进行排序,比较大小的操作…………(题外话能不能少一点啊~~~~)

OKOK,编译!!!!!!!!!!!!!!
C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\a.vb(35) : error BC30452: Operator
'>' is not defined for types 'ItemType' and 'ItemType'.
我靠,这都通不过,本人当时顿时傻了5秒钟



Object都可以过,泛型居然就不行,微软该不会这么弱吧~~~
为了证明我的想法,把泛型函数改了一下
public sub Test(of ItemType)(byval a as ItemType,byval b as ItemType)
dim oa ,ob as object
oa=a
ob=b
console.writeline(a>b)
end sub
本函数简直就是弱智写的,不过我就当一次弱智好了
编译pass,执行pass
晕泛型本来就是用来提高效率,避免值类型转换为引用类型的装箱操作,如果要这么写,那还有P个优势啊~~~~~

我就测试了这几项,这个net2.0的框架还是从windows update上更新下来的,我只能说好伤心啊,难道是我期望太高了嘛???~~~~
...全文
2796 69 打赏 收藏 转发到动态 举报
写回复
用AI写文章
69 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhengwu1983 2006-03-25
  • 打赏
  • 举报
回复
占地
chengbo1983 2006-03-25
  • 打赏
  • 举报
回复
看不懂了,没接触过2.0
也不懂VB……
顶一下
indentify 2006-03-25
  • 打赏
  • 举报
回复
这世界真是什么人都有
在发表意见之前请多阅读和学习
基于.NET 的语言都是一样的没必要比较

关于类型的问题
我看楼主还是未充分了解.NET

我继续潜水去了~
MonkWang 2006-03-25
  • 打赏
  • 举报
回复
vs.net2005感觉不是那么稳定 总出问题我现在!
netdong 2006-03-25
  • 打赏
  • 举报
回复
http://www.718.com.cn
轻松构建.net应用,
Asp.net空间只需155元/年。
磁盘空间: 50M
MS SQL数据库空间: 20M
支持: ASP.net、ASP
FTP管理
流量无限制
P4 2.0G以上CPU 2G内存
硬盘2*73G 操作系统: Windows2003
千兆光纤接入,百兆独享宽带
7×24小时全网监控系统,千兆防火墙系统、防攻击设备
网通/电信

查看更多虚拟主机请点击http://www.718.com.cn有更多款式配置适合你的需求。
limao1358 2006-03-25
  • 打赏
  • 举报
回复
现在java很多方面也在学c#,ado.net部分,元数据,foreach,等等
littlegang 2006-03-24
  • 打赏
  • 举报
回复
.net新手,我的感觉 C# 有点像抄袭 java的
devilteam 2006-03-19
  • 打赏
  • 举报
回复
那些功能好像是C# 2.0才有的吧,并不是所有.net 2.0支持的语言都有的.
ycy589 2006-03-16
  • 打赏
  • 举报
回复
学习
datablader 2006-03-16
  • 打赏
  • 举报
回复
泛型不等于类型的滥用。别觉得随意转换是件好事。
DigData 2006-03-15
  • 打赏
  • 举报
回复
Mark, 正在啃MSDN, 初步感觉, C#和Java真的太多地方相似。
wjjdnajj 2006-03-15
  • 打赏
  • 举报
回复
路过
zincy 2006-03-10
  • 打赏
  • 举报
回复
是你期望太多,要求太高。
Alden 2006-03-09
  • 打赏
  • 举报
回复
好好研究一下
menuvb 2006-03-09
  • 打赏
  • 举报
回复
刚刚特意上去MSDN网站看了下VB.NET的编程指南有关泛型的资料。发现上面VB.NET的泛型这些根本就没讲到过。倒是C#整整一堆。郁闷哪。
menuvb 2006-03-09
  • 打赏
  • 举报
回复
C# 泛型和 C++ 模板都是用于提供参数化类型支持的语言功能。然而,这两者之间存在许多差异。在语法层面上,C# 泛型是实现参数化类型的更简单方法,不具有 C++ 模板的复杂性。此外,C# 并不尝试提供 C++ 模板所提供的所有功能。在实现层面,主要区别在于,C# 泛型类型替换是在运行时执行的,从而为实例化的对象保留了泛型类型信息。有关更多信息,请参见运行库中的泛型(C# 编程指南)。

以下是 C# 泛型和 C++ 模板之间的主要差异:

*

C# 泛型未提供与 C++ 模板相同程度的灵活性。例如,尽管在 C# 泛型类中可以调用用户定义的运算符,但不能调用算术运算符。
*

C# 不允许非类型模板参数,如 template C<int i> {}。
*

C# 不支持显式专用化,即特定类型的模板的自定义实现。
*

C# 不支持部分专用化:类型参数子集的自定义实现。
*

C# 不允许将类型参数用作泛型类型的基类。
*

C# 不允许类型参数具有默认类型。
*

在 C# 中,尽管构造类型可用作泛型,但泛型类型参数自身不能是泛型。C++ 确实允许模板参数。
*

C++ 允许那些可能并非对模板中的所有类型参数都有效的代码,然后将检查该代码中是否有用作类型参数的特定类型。C# 要求相应地编写类中的代码,使之能够使用任何满足约束的类型。例如,可以在 C++ 中编写对类型参数的对象使用算术运算符 + 和 - 的函数,这会在使用不支持这些运算符的类型来实例化模板时产生错误。C# 不允许这样;唯一允许的语言构造是那些可从约束推导出来的构造。

网上看到的。
最近也在研究泛型和.NET2.0。没有头绪:<
menuvb 2006-03-09
  • 打赏
  • 举报
回复
楼主非常可爱的说:)

Buffer_pool 2006-03-09
  • 打赏
  • 举报
回复
什么都不懂的人也好意思发帖子!
kittyxiayun 2006-03-09
  • 打赏
  • 举报
回复
package leeko;
import java.sql.*;

public class Table{

Connection con;
Statement stmt;
ResultSet rs;
public void connectToDB(String userName,String password){
try{
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
String source = "jdbc:odbc:"+databaseName;
con = DriverManager.getConnection(source, userName, password);
stmt = con.createStatement();
}
上面这段java连接数据库的程序能帮我翻成c#的吗?谢谢各位!
catch(ClassNotFoundException e){
System.out.println("error:"+e);
}
catch(SQLException e){
System.out.println("error:"+e);
}

}
Rossetti 2006-03-06
  • 打赏
  • 举报
回复
http://www.developerfusion.co.uk/utilities/convertvbtocsharp.aspx

用这个转换。
加载更多回复(49)

17,740

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 .NET Framework
社区管理员
  • .NET Framework社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧