Use VB.NET and C# in the same application?

I am developing a GUI based application in MS Visual Studio 2005, I just want to know if it is possible to use both VB.NET and C# in the same project. Or can I include a module written in C# in my VB.NET project?

I have a class written in C# which I want to use in my VB.NET based project, so if I can include and call functions from that project than I won't have to write the class again in VB.NET.

So please help me as I am new to .NET programming.


Solution 1:

I just want to know that is it possible to use both VB and C# in the same project.

No, not in the same project. On the other hand, you can use them in the same solution.

Or can i include a module written in C# in my VB.net project.

I propose that you create a solution containing two projects: one in C# which forms a library that you use from your VB project. This is straightforward, easy to maintain and easy to extend.

Solution 2:

I've never done it myself, but I know you can compile the C# code into a dll and then load and reference the dll in your VB project.

From "Calling C# class in VB.net":

I think the C# code that you want to use must be compiled as a DLL. Once that is done, simple add a reference to that project to your VB.Net project, import the namespace you need, and then you can use the C# code.

Also see How To: Create and Use C# DLLs (from MSDN, for VS2005)

Solution 3:

You also want to ensure that you C# code is CLS compliant. This means that it won't publicly expose any functionality which other .NET languages won't understand (for example unsigned ints - which don't exist in VB, or differing classes only by case - since VB is not case-sensitive). To do this you need to add an attribute so that the compiler will raise errors if you have broken any of the guidelines. This article shows you how to do this:

The CLSCompliantAttribute can be applied to assemblies, modules, types, and members.

For marking an entire assembly as CLS compliant the following syntax is used

using System; 
[assembly:CLSCompliant(true)]

For marking a particular method as CLS compliant the following syntax is used

[CLSCompliant(true)]  
public void MyMethod()`