C#程序转为VB.NET程序的一个小问题
2008-03-22 15:21
495 查看
.net的一个很重要的特性就是跨语言的编程,用C#写的dll可以在VB.net里调用,例如:
用C#写的一个类,编译到dll中,然后在VB.net中调用:
using System;
namespace CLSsample
在VB.net中调用:
Dim c As
CLSsample.CLSTest = New
CLSsample.CLSTest
c.ABC()
现在给dll中的CLSTest类加一个函数:
public void
abc()
{
Console.WriteLine("abc");
}
先编译C#写的这个dll,再编译VB.net工程,编译出现问题,提示信息如下:
重载决策失败,原因是没有可访问的“ABC”最适合这些参数:
'Public Sub abc()':
不是最适合。
'Public Sub ABC()': 不是最适合。
原因很简单,因为C#是区分大小写的,但是VB.net不区分。
而真正的原因在于用C#写的这个类是不符合CLS(公共语言规范)的。
现在在命名空间前面加上一句,标示编译时确保不包含其它语言无法使用的内容:
[assembly:CLSCompliant(true)]
namespace CLSsample
{
......
public void ABC()
{
Console.WriteLine("ABC");
}
public void
abc()
{
Console.WriteLine("abc");
}
}
这时候再编译,就会出现错误,提示信息:
只在大小写不同的标识符“CLSsample.CLSTest.abc()”不符合 CLS
要编译通过,在函数abc前加上:
[CLSCompliantAttribute(false)]
指出 abc函数 是不符合 CLS 的
下面是MSDN中对CLS的部分说明:
CLS
在设计上足够大,可以包括开发人员经常需要的语言构造;同时也足够小,
大多数语言都可以支持它。此外,任何不可能快速验证代码类型安全性的语言
构造都被排除在
CLS 之外,以便所有符合 CLS 的语言都可以生成可验证的代码
(如果它们选择这样做)。
也就是说开发的类库必须遵守CLS才可以更好的被其它的语言所使用。否则就像
上面的情况,用C#开发的动态链接库在VB.net中就出现了问题,特别是开发一些
通用的类库的时候,就更需要注意这一点。
用C#写的一个类,编译到dll中,然后在VB.net中调用:
using System;
namespace CLSsample
在VB.net中调用:
Dim c As
CLSsample.CLSTest = New
CLSsample.CLSTest
c.ABC()
现在给dll中的CLSTest类加一个函数:
public void
abc()
{
Console.WriteLine("abc");
}
先编译C#写的这个dll,再编译VB.net工程,编译出现问题,提示信息如下:
重载决策失败,原因是没有可访问的“ABC”最适合这些参数:
'Public Sub abc()':
不是最适合。
'Public Sub ABC()': 不是最适合。
原因很简单,因为C#是区分大小写的,但是VB.net不区分。
而真正的原因在于用C#写的这个类是不符合CLS(公共语言规范)的。
现在在命名空间前面加上一句,标示编译时确保不包含其它语言无法使用的内容:
[assembly:CLSCompliant(true)]
namespace CLSsample
{
......
public void ABC()
{
Console.WriteLine("ABC");
}
public void
abc()
{
Console.WriteLine("abc");
}
}
这时候再编译,就会出现错误,提示信息:
只在大小写不同的标识符“CLSsample.CLSTest.abc()”不符合 CLS
要编译通过,在函数abc前加上:
[CLSCompliantAttribute(false)]
指出 abc函数 是不符合 CLS 的
下面是MSDN中对CLS的部分说明:
CLS
在设计上足够大,可以包括开发人员经常需要的语言构造;同时也足够小,
大多数语言都可以支持它。此外,任何不可能快速验证代码类型安全性的语言
构造都被排除在
CLS 之外,以便所有符合 CLS 的语言都可以生成可验证的代码
(如果它们选择这样做)。
也就是说开发的类库必须遵守CLS才可以更好的被其它的语言所使用。否则就像
上面的情况,用C#开发的动态链接库在VB.net中就出现了问题,特别是开发一些
通用的类库的时候,就更需要注意这一点。
相关文章推荐
- 一个自动把Visual Studio.NET的C#,VB.NET,VC++project工程转为NAnt Build的小程序(利用XSL)
- C#.NET常见问题(FAQ)-程序如何把窗体文件从从一个项目中复制到另一个项目
- [VB.NET]如何把一个c#程序转变为VB.NET
- .NET的世界里,入门的VB / C#语法转换不该是一个问题。
- [VB.NET]在一个项目中VB.net 与 C# 共存问题?
- (.net,c#,winform)获取程序所在路径的问题
- [VB.NET]小弟初学.NET 想请教一个问题,还请大家给我帮助.
- 防止同一个程序多次运行。 [VB.NET]
- [转载]VB.net程序的打包问题示例!
- VB.NET 代码转为C#
- c#(或vb.net)程序改进,可以提高性能哦
- C#中出现了一个问题,就是程序主窗体已经打开,在调用子窗体时候出现了创建窗口句柄时出错。
- 【C#】对异步请求处理程序IHttpAsyncHandler的理解和分享一个易用性封装 【手记】走近科学之为什么明明实现了IEnumerable<T>的类型却不能调用LINQ扩展方法 【手记】手机网页弹出层后屏蔽底层的滑动响应 【手记】ASP.NET提示“未能创建类型”处理 【Web】一个非常简单的移动web消息框 【手记】解决EXCEL跑SQL遇“查询无法运行或数据库表无法打开...”
- 将一个项目从Vb6升级到VB.NET,升级完毕无法打开项目文件,项目文件名变为.vbproj.vs7.vbproj的问题
- VB.NET和C#转换的在程序
- [zhuan]asp.net程序性能优化的七个方面 (c#(或vb.net)程序改进)
- 一个简单的VB.net程序
- 一个有关皇后问题的程序(C#)
- [VB.NET]一个简单的问题!立刻给分!
- [VB.NET]vb.net的一个小问题