在VB.NET项目中使用C#编写的代码

简介: 在VB.NET项目中使用C#编写的代码

前言

VB.NET,全名Visual Basic .NET,是Microsoft .NET框架的一部分,是一种面向对象的编程语言。它继承了Visual Basic的易用性,同时增加了对面向对象编程的支持。VB.NET提供了大量的内置函数,使得开发者可以更容易地处理字符串、数学计算、文件和目录访问等任务。它还提供了对Windows Forms和WPF的强大支持,使得开发Windows桌面应用程序变得更加简单。VB.NET的语法简洁明了,是初学者学习面向对象编程的好选择。

我个人刚开始接触.NET的时候,也是使用的VB.NET,但是随着自己对.NET的深入,我发现.NET的主流语言是C#,于是能使用C#的场合就开始使用C#,已经很久没有写过VB.NET。但是肯定会有一些项目一些人使用的主流语言是VB.NET,也就是VB.NET还有它的用武之地。

比如会遇到这样的场景,你的老板喜欢使用VB.NET,它用VB.NET做了一个项目,而你喜欢C#,你用C#写了一些功能,你的老板希望在它的项目中集成你写的功能。这时候可以选择用VB.NET改写,也可以选择使用C#类库,由于老板不关心你选择什么方式,只要实现了他的要求就行,同时我也对VB.NET不太熟悉了,不想用VB.NET重写,因此使用C#类库的方式。

具体步骤

在项目解决方案中新建一个C#类库项目

如下图所示:

以之前写的嵌入窗体为例:

添加项目引用

右键vb.net项目点击添加——项目引用:

勾选类库:

使用 Imports 关键字引入C#类库的命名空间

在你的VB.NET代码中,使用 Imports 关键字引入C#类库的命名空间,然后你就可以使用C#类库中的类和方法了。

之前C#的写法如下:

Task.Run(() =>
            {
                if (WindowManager.FindWindow("Sysplorer [企业版]"))
                {
                    this.Invoke(new Action(() =>
                    {
                        WindowManager.SetParent(panel1.Handle, "Sysplorer [企业版]");  //设置父容器
                    }));
                }
                else
                {
                    MessageBox.Show("未能查找到窗体");
                }
            });

现在改写成VB.NET:

Task.Run(Sub()
             If WindowManager.WindowManager.FindWindow("Sysplorer [企业版]") Then
                 Me.Invoke(New Action(Sub()
                                          WindowManager.WindowManager.SetParent(Panel1.Handle, "Sysplorer [企业版]") '设置父窗口
                                      End Sub))
             Else
                 MessageBox.Show("未能找到窗口")
             End If
         End Sub)

之前的C#写法:

public Form1()
{
     InitializeComponent();
     this.Resize += new EventHandler(Form1_Resize);
}
private void Form1_Resize(object sender, EventArgs e)
        {
            Task.Run(() =>
            {
                if (WindowManager.intPtr != IntPtr.Zero)
                {
                    WindowManager.ResizeWindow();
                }
            });
        }

现在改写成VB.NET:

Public Sub New()
     InitializeComponent()
     AddHandler Me.Resize, AddressOf Form1_Resize
 End Sub
 
 Private Sub Form1_Resize(sender As Object, e As EventArgs)
    Task.Run(Sub()
                 ' 如果窗口句柄不为零
                 If WindowManager.WindowManager.intPtr <> IntPtr.Zero Then
                     WindowManager.WindowManager.ResizeWindow()
                 End If
             End Sub)
End Sub

这样只用少量的修改代码就可以集成之前用C#实现的功能了。

实现效果如下所示:

总结

遇到需要在VB.NET项目中集成用C#写的代码,可以通过类库引用的方式。

具体步骤为:

  1. 在解决方案中添加一个新的C#类库项目。
  2. 将你的C#代码添加到新的类库项目中。
  3. 在你的VB.NET项目中添加对新C#类库的引用。
  4. 在你的VB.NET代码中,使用 Imports 关键字引入C#类库的命名空间,然后你就可以使用C#类库中的类和方法了。
目录
相关文章
|
2月前
|
C# 开发工具 C++
code runner 运行C#项目
本文介绍了如何修改Code Runner设置使 Visual Studio Code (VS Code) 能直接运行完整的 C# 项目。传统方式依赖 cscript 工具,仅支持 .csx 文件,功能受限且已停止维护。新配置使用 `dotnet run` 命令,结合一系列炫酷的cmd指令,将指令定位到具体的csproj文件上进行运行。
117 38
|
2月前
|
开发框架 前端开发 .NET
一个适用于 .NET 的开源整洁架构项目模板
一个适用于 .NET 的开源整洁架构项目模板
67 26
|
12天前
|
传感器 人工智能 机器人
D1net阅闻|OpenAI机器人项目招新 或自研传感器
D1net阅闻|OpenAI机器人项目招新 或自研传感器
|
2月前
|
开发框架 安全 .NET
【Azure Developer】.NET Aspire 项目本地调试遇 Grpc.Core.RpcException 异常( Error starting gRPC call ... )
Error starting gRPC call. HttpRequestException: The SSL connection could not be established, see inner exception. AuthenticationException: The remote certificate is invalid because of errors in the certificate chain: UntrustedRoot
67 12
|
3月前
|
开发框架 搜索推荐 算法
一个包含了 50+ C#/.NET编程技巧实战练习教程
一个包含了 50+ C#/.NET编程技巧实战练习教程
152 18
|
3月前
|
算法 Java 测试技术
使用 BenchmarkDotNet 对 .NET 代码进行性能基准测试
使用 BenchmarkDotNet 对 .NET 代码进行性能基准测试
85 13
|
3月前
|
开发框架 人工智能 .NET
C#/.NET/.NET Core拾遗补漏合集(24年12月更新)
C#/.NET/.NET Core拾遗补漏合集(24年12月更新)
|
3月前
|
开发框架 算法 .NET
C#/.NET/.NET Core技术前沿周刊 | 第 15 期(2024年11.25-11.30)
C#/.NET/.NET Core技术前沿周刊 | 第 15 期(2024年11.25-11.30)
|
3月前
|
开发框架 Cloud Native .NET
C#/.NET/.NET Core技术前沿周刊 | 第 16 期(2024年12.01-12.08)
C#/.NET/.NET Core技术前沿周刊 | 第 16 期(2024年12.01-12.08)
|
3月前
|
监控 前端开发 API
一款基于 .NET MVC 框架开发、功能全面的MES系统
一款基于 .NET MVC 框架开发、功能全面的MES系统

热门文章

最新文章