Did you ever try to use two languages in some of your project? Or Say you created a Class in VB.NET and used in C# code. As .NET provides us the capability to use multiple languages in same project, even it allows to inherit a VB.NET class in C# Class.If you have not tried earlier then this post will help you in getting practical examples. So Let’s move to the example
In this example, I have created two projects : one is C# Class library project and other is VB console application. My C# class looks like
public class Person { public void Print() { Console.WriteLine("C# - Person's Print method"); } }
It’s perfectly legal to inherit C# class in vb class. So here my vb class looks like
Public Class Student Inherits CLSCompliantCsharp.Person Public Sub Display() Console.WriteLine("I am Student VB class") End Sub End Class
So here I have just added one more method Display in my vb.net class. Let’s move to main method
Module Module1 Sub Main() Dim o As New Student() o.Display() o.Print() Console.ReadLine() End Sub End Module
Let’s run it and see the output.
Image may be NSFW.
Clik here to view.So it is perfectly fine and run as expected. Now let’s add one more method in my person class as
public class Person { public void Print() { Console.WriteLine("C# - Person's Print method"); } public void print() { Console.WriteLine("C# - Person's print method"); } }
Now I have added one new method with same name print but it’s first letter is small letter. As we know that C# is case sensitive language so having the method with same name with different case, is perfectly legal.So lets build the C# project after making the changes So it is perfectly builds.
Now again move to the VB project and run the code.
Oh.. it throws a error as
Image may be NSFW.
Clik here to view.As we can see that it is giving error message that Print is ambiguous because for VB.NET Print() and print() are same while for Csharp different.
So How to deal this?
.NET provides us a way to make a library language neutral i e it defines some basic set of rules that can be applied to any library to make neutral. So if you think that your code/dll might be used by different language then you must apply an attribute to the your assembly.
The attribute is CLSCompliant
So if you want to make it a Class library CLSCompliant then add this attribute in the AssemblyInfo.cs file as
[assembly: CLSCompliant(true)]
I have added the above attribute in my C# project and now lets build it (with having two print method as earlier)
Image may be NSFW.
Clik here to view.Now if you see that then it is showing an warning that this code is not CLS-Compliant Now you can correct it. Once you remove all the CLS-Complaint warnings and you can take a deep breath. You wont get any complaint if your code is used on any other language in .NET platform.
CLSCompliant attribute also provides more granular approach. It means if you don’t want to make the entire Class library as CLS-Compliant then you apply this attribute at class level as well. Then compiler will apply this attribute on that class only and that can be used by other language applications accordingly.
Hope you all have enjoyed this post.
Cheers,
Brij
Image may be NSFW.
Clik here to view.
Clik here to view.
