.Net Framework contains a large library and support for cross language interoperability (i.e., the ability through which each and every language can use code written in other languages) across several programming languages. It also support the feature of code reusability, because of cross language interoperability code written in any of .net compliant language can be used by other .net compliant language. e.g., code written in C#.net can be used with the modules developed in vb.net,f#.net etc.
When we write a program in C#.net and compile that C# program it will generate IL (Intermediate Language). Now, this code generated on compilation can be used by any other language that is supported by .Net Framework. The target language does not care about in which language your code was initially written ,all it want is your code should contain a class supported by .Net Framework.
Now, Let us discuss a practical example of Cross Language Interoperability. We will a create a class Library(.dll) in c# that will be used in a vb.net code(.exe).
Create a Class Library Project in c#.
Create a class and declare it to be public.
Add code that can be used in other modules like functions to calculate area, sum or something else.
Compile the code written in c# to generate a IL (Intermediate Language) code ie., It will create a .dll in bin or debug folder.
Code Snippet for class1.cs is as follows:
Using System;
namespace ClassLibrary
{
Public class class1
{
Public int Sum (int l, int b)
{return l*b;}
Public int sum (int l, int b)
{return l*b;}
}
}
In the above code, We have written code in C# i.e., a case sensitive Language. So,we have declared two functions for calculating sum, where name of functions is same but that differ in cases of letters in name of functions. So, being a case sensitive language C# treat both as different functions. But Vb.net is a case in- sensitive language so it will treat both as same functions. To avoid any hassle in consuming this .dll we can rename the functions and give them unique name so that it can work fine with case sensitive as well as case in- sensitive languages. Also we need to make this Library CLS complaint for this on the top of namespace ClassLibrary, add the statement [assembly:CLSCompliant(true)]. Now, if something is not CLS compliant in your code that will get highlighted and you can fix that issue.
Using System;
[assembly:CLSCompliant(true)]
namespace ClassLibrary
{
Public class class1
{
Public int Sum(int l, int b)
{return l*b;}
Public int sum1(int l, int b)
{return l*b;}
}
}
Now, let's consume this C# .dll in a VB .NET application.
Create a VB .NET Console Application.
Add Reference of ClassLibrary.dll to the application.
Imports ClassLibrary.Class1 on the top of vb.net code file
Create object of class library(.dll) to access functions of the class Library.
strong text
Code Snippet for Module1.vb class of vb.net console Application is as follows:
Imports ClassLibrary.Class1
Module Module1
Dim obj As New ClassLibrary.Class1
Sub Main()
Obj.sum(1,2)
Obj.sum1(3,4)
End Sub
End Module
VB .NET got access to C# functions after making C# assembly. CLS Complaint.
0 Comment(s)