.NET软件组件技术(2)

简介: 组件的继承        前面实现的将C#组件组合进VB工程中只是牛刀小试,现在我们来实现混合语言的面向对象编程(OOP),首先,我们来尝试一下混合语言组件的继承。       新建一个VB类库工程VBComponent,在工程中按上面的方法添加对CSharpClass.
 

组件的继承

       前面实现的将C#组件组合进VB工程中只是牛刀小试,现在我们来实现混合语言的面向对象编程(OOP),首先,我们来尝试一下混合语言组件的继承。

      新建一个VB类库工程VBComponent,在工程中按上面的方法添加对CSharpClass.dll组件的引用,然后组件中增加一个新类:ExtendsFromCSharp,它继承自C#类CSharpClassExtendsFromCSharp类提供一个Add(x,y)方法,将两数相加,用UML表示如图4


4 C#类继承而来的VB

具体代码如下:

 

Imports CSharpClassNameSpace.CSharpClass

'继承自C#组件中的类CSharpClass

Public Class ExtendsFromCSharp

    Inherits CSharpClassNameSpace.CSharpClass

    Public Function Add(ByVal x As Integer, ByVal y As Integer) As Long

        Return x + y

    End Function

End Class

 

    编译生成VBComponent.DLL组件(至于如何使用和测试这个类,就不用我多说了吧?)。

    现在,VBComponent组件中的ExtendsFromCSharp类将拥有两个方法:SaySomething来自C#基类CSharpClass,而Add()函数则由VB实现。你创建的ExtendsFromCSharp类对象居然组合了两种不同语言开发的功能,你甚至不知道这些方法和函数是由哪种语言开发的,是不是很神奇?

    让我们稍微休息一会,进行一个小结:

      现在我们已掌握了从现成的组件中派生新类的方法,这就是说,我们可以建立自己的组件库,并在合适的时候动态地扩展它,这种扩展是跨语言的。

      VS.NET中使用混合语言组件时,当所使用的组件修改过后,注意需要动态地更新工程引用。方法是重新生成解决方案,或者是删除原有引用后再重新加入工程。

      由于组件间相互继承,这就造成了组件库之间的依赖性(比如VBComponent.DLL组件就依赖于CSharpClass.DLL),因此,在实际项目开发中,任何一个项目小组成员所开发的组件库,都要求在文档中声明其组件库依赖性。另外,在系统开发完成部署到用户计算机上时,相互依赖的组件库必须绑在一起同时复制到用户计算机上,不能只提供一个。

 

    下面,让我们走得更远一些,在组件间实现多态!

组件间的多态调用

    我们来实现一个“经典”的多态例子,它说明以下事实:圆和矩形都是几何图形,都可以求面积。

    继续上面的例子,在C# 工程中选定原先的CSharpClass.cs文件,在类CSharpClass之外,输入以下代码:

 

     public interface IMyShape

     {

         double Area();

     }

     public class CSharpRect :IMyShape

     {

         public float width;

         public float height;

       

         public double Area()

         {

              return width*height;

         }

     }

   

    很明显,在这里我们定义了一个接口IMyShape,类CSharpRect实现了这个接口,它对接口所定义的求面积的函数double Area()提供了自己的实现:

                矩形面积=*

    编译生成解决方案,CSharpClass.DLL得到更新。

    打开VBComponent工程,注意到刷新此工程对CSharpClass.DLl的引用,检查方法是在选菜单:视图à对象浏览器,查看CSharpClass是否体现了新的更改,如5图所示:


5 检查组件是否更新

     新建一个类文件VBCircle.vb,输入以下代码:

 

Public Class VBCircle

    Implements CSharpClassNameSpace.IMyShape

 

    Private _radius As Single

 

    Property Radius() As Single

        Get

            Radius = _radius

        End Get

        Set(ByVal Value As Single)

            _radius = Value

        End Set

    End Property

 

    Public Sub New()

        _radius = 0

    End Sub

 

    Public Function Area() As Double Implements CSharpClassNameSpace.IMyShape.Area

        Return System.Math.PI * _radius * _radius

    End Function

End Class

 

    编译,生成VBComponent.DLL

    现在,我们就实现了基于组件的以下面向对象系统设计:

 

 

    新建一个使用VBWindows应用程序,在工程中加入对以上两个组件库的引用,往窗体上加入一个按钮,在其Click事件中书写以下代码:

 

Private Sub Button_Click() Handles Button6.Click

        Dim VBObj As New VBComponent.VBCircle()

        VBObj.Radius =10

        Dim CSharpObj As New CSharpClassNameSpace.CSharpRect()

        Dim area As Double

        CSharpObj.width = 10

        CSharpObj.height = 20

        CalArea(VBObj)

        CalArea(CSharpObj)

    End Sub

   

    其中CalArea()是一个Sub过程,它接收一个IMyShape类型的参数,可以传给它任何一个实现了IMyShape接口的对象,这种以接口而不是具体类来编定代码的方法,就是典型的多态编码方式。

 

Private Sub CalArea(ByVal obj As CSharpClassNameSpace.IMyShape)

        MessageBox.Show(Convert.ToString(obj.Area()))

End Sub

 

    经过测试,跨语言、跨组件的多态的确可以正常地动作。

 

    好了,现在让我们好好想想都实现了什么东西,可以怎样应用到开发实践中:

    我们可以将某个接口封装到一个组件中,然后,具体实现这个接口的类我们可以放到不同的组件中,交给不同的程序员以他们所喜爱的语言来开发。使用这些组件的程序员只要在他的代码中始终使用接口变量而不是具体类的变量,我们就可以动态地替换掉某个具体的实现接口的组件,而不会影响使用这些组件的程序。

    哇,这不就意味着我们可以把一个完整的软件系统给大卸八块,然后根据具体情况选一个组件插入系统?太棒了!下面,就让我们来开始进行组件化编程最精彩之旅---软件组件的动态装配与插拔。


相关文章
|
1月前
|
人工智能 前端开发 Devops
.NET技术在现代开发中的作用:.NET技术的核心价值、在现代应用开发中的实际应用、以及面临的挑战与未来趋势。
.NET技术是软件开发领域的核心力量,本文从其核心价值、实际应用及未来挑战三方面进行探讨。它支持多种语言,提供强大的开发工具和丰富的类库,并具备跨平台能力。在现代应用开发中,.NET广泛应用于企业级系统、Web应用、移动应用、云服务和游戏开发等领域。面对性能优化、容器化、AI集成等挑战,.NET持续创新以适应不断发展变化的技术环境。
48 4
|
1月前
|
人工智能 开发框架 .NET
.NET技术的强大功能:.NET技术的基础特性、在现代开发中的应用、以及它如何助力未来的软件开发。
.NET技术是软件开发领域的核心支柱,以其强大功能、灵活性及安全性广受认可。本文分三部分解析:基础特性如多语言支持、统一运行时环境;现代应用如企业级与Web开发、移动应用、云服务及游戏开发;以及未来趋势如性能优化、容器化、AI集成等,展望.NET在不断变化的技术环境中持续发展与创新。
65 4
|
1月前
|
人工智能 物联网 开发者
.NET技术在现代软件开发中的应用愈发广泛和深入
.NET技术是软件开发的关键支柱,本文分为三部分探讨其创新应用:最新进展如.NET 5/6统一平台、性能提升、跨平台支持增强、云集成优化及开源社区贡献;应用场景涵盖微服务架构、物联网、AI/机器学习、游戏及移动应用开发;未来发展潜力在于持续性能优化、云原生支持、新兴技术集成、生态扩张及教育培训加强。.NET正以其强大适应性和创新潜力引领软件开发的新方向。
31 3
|
1月前
|
人工智能 开发框架 .NET
如何掌握.NET技术,引领开发前沿:.NET技术的核心能力、在现代开发中的应用实践、以及如何通过.NET技术实现持续创新。
.NET技术已成为软件开发不可或缺的部分,本文分三部分探讨:核心能力如多语言支持、统一运行时环境、丰富的类库及跨平台能力;现代开发实践包括企业级应用、Web与移动开发、云服务及游戏开发;并通过性能优化、容器化、AI集成等方面实现持续创新,使开发者站在技术前沿。
47 3
|
2天前
|
人工智能 前端开发 开发工具
解读.NET 技术的开发潜力
本文全面介绍了.NET技术在软件开发领域的核心优势、创新应用及面临的挑战。.NET以其统一的开发平台、强大的工具和跨平台能力,成为企业级应用、Web应用乃至游戏开发的理想选择。然而,在性能优化、容器化及AI集成等方面仍需不断突破。通过积极拥抱开源和社区驱动模式,.NET将持续推动软件开发的进步。
12 1
|
15天前
|
监控 网络协议 API
.NET WebSocket 技术深入解析,你学会了吗?
【9月更文挑战第4天】WebSocket 作为一种全双工协议,凭借低延迟和高性能特点,成为实时应用的首选技术。.NET 框架提供了强大的 WebSocket 支持,使实时通信变得简单。本文介绍 WebSocket 的基本概念、.NET 中的使用方法及编程模型,并探讨其在实时聊天、监控、在线游戏和协同编辑等场景的应用,同时分享最佳实践,帮助开发者构建高效实时应用。
57 12
|
9天前
|
人工智能 前端开发 Devops
.NET技术自发布以来,在软件开发领域发挥了重要作用
【9月更文挑战第12天】.NET技术自发布以来,在软件开发领域发挥了重要作用。本文分为三部分探讨其在现代开发中的应用:首先介绍.NET的核心价值,包括语言多样性、强大的开发工具支持、丰富的类库、跨平台能力和活跃的社区;接着分析其在企业级应用、Web开发、移动应用、云服务及游戏开发中的实际应用;最后讨论.NET面临的挑战与未来趋势,如性能优化、容器化、AI集成及跨平台框架竞争等。通过不断的技术创新和社区驱动,.NET将持续推动软件开发的进步。
21 4
|
14天前
|
人工智能 开发框架 算法
C#/.NET/.NET Core技术前沿周刊 | 第 2 期(2024年8.19-8.25)
C#/.NET/.NET Core技术前沿周刊 | 第 2 期(2024年8.19-8.25)
|
14天前
|
传感器 应用服务中间件 Linux
C#/.NET/.NET Core技术前沿周刊 | 第 3 期(2024年8.26-8.31)
C#/.NET/.NET Core技术前沿周刊 | 第 3 期(2024年8.26-8.31)
|
14天前
|
人工智能 算法 C#
C#/.NET/.NET Core技术前沿周刊 | 第 1 期(2024年8.12-8.18)
C#/.NET/.NET Core技术前沿周刊 | 第 1 期(2024年8.12-8.18)