Using vb.net classes in c# - c#

How can I create a type in vb.net and use the type in c#?
I guess I need to compile the vb project and add reference to the dll but have no idea if this is the right way to do it, or the reference will be valid.
Doing this is not for fun, we have some vb code and we're considering this option.

Just create a Class Library project in VB, and then add a reference to that project from your C# project. (Or if it's in a different solution, add a reference to the DLL created by the VB project.) It should be absolutely fine - you'll have access to all the Public types from your class library.
To address the comment in your question, the projects can both default to the same namespace, but it's generally a better idea to make each project have its own namespace, so it's clear where any particular type comes from.

Related

Bind several classes into one .dll file in C#

A beginner's question. It is c#.
Let's say I have three classes in one project named Employee, Department, Address. For some reason, I would like to have a .dll file (let's name it test.dll) to have all three classes included that I can call it from some other project using syntax like "test.Employee emp1 = new test.Employee();"
That is my idea. Is this possible? If yes, how should I do that? Do I have to create a class library project to do so? I know nothing about a class library project. So I may need further help with that.
If the answer is no, how do I add references to those classes from other solutions?
Thanks.
Create a class library project.
Give it a proper namespace
Write your library classes, then compile to a dll
Then add a reference to that dll in the other project you want to use it in
add a using statement to include the reference in your code files.
Pretty straightforward

compile code in VB are the same as C#?

Let's say that I have an entire project build in C# and other project build VB and I made a reference to this VB project Because this two projects need to interact between each other. Is this possible? the compiled code of this two project could live together??. Also if i made the same project VB and C# the compiled version are the same??
They both compile into intermediate language (IL), and you can use a VB.NET library with C# and vice versa.
If you want to examine the compiled versions of both languages I recommend you download ILSpy - you can open up any .NET assembly with it. There are a tiny few things that are possible in the one but not in the other, and IL has features not implemented in either :)
.net / clr uses an intermediate language.
also referred as IL.
it is similiar to Java's ByteCode
code program written in c# and vb may differ in a the resulting IL-Code but,
the executional result is the same.
Yes, you can mix projects written in different languages.
There are some subtle differences in how the C# and VB compiler produce code from the source code, but most code will be identical once it's compiled.
One of those subtle differences for example is that local variables in VB are initialised to zero, while local variables in C# are not initialised.
Create empty solution
Right click solution name in solution explorer, add existing project, add VB project
Right click solution name in solution explorer, add existing project, add C# project
Solution Explorer>VB project>"My Project">References>Add... button>Projects>Select the C# project>OK
Now you can access public methods in the other project.

Creating reusable code modules (e.g. C++ style classes, headers) in C#

In C++, you can create usable code modules by creating a class, and giving out header and implementation files to the developers who want to use your class.
I want to do this in C# but I have little experience with the C# language. Basically I need to create a class that can be reused by another C# programmer in Visual Studio 2010. I know that referencing DLLs is one way to use other peoples' classes. Do I need to create a DLL to achieve what I want to accomplish? Or are there other, better ways?
For example, let's say I create a Cow class that can "moo". In C++, someone who uses my class would just include Cow.h, instantiate a Cow object myCow, and then call myCow.moo(). How can I achieve this simple task in C#?
Thanks for your time and patience.
Yes, just create Class Library project and share the resulted dll's.
Other developers will just need to add a reference to your dll and after that they're free to use any public objects from your library.
It is the standard to create a dll to distribute reusable code.
You could look into old school COM objects, but I would steer clear of them and just use a well organized class library.
Of course you can always share your source files, but the recommended .Net way of distributing reusable code is though dlls. This allows developers using any .Net language to use your code (they don't have to use the same language as your project).
It also makes it easier to maintain the project. If you share source code then it will likely be more difficult to distribute updates than if you just needed to update a single dll. If you have multiple projects referencing the same dll, they can all reference it from the same location and whenever the dll is updated, all the projects that use it will automatically use the updated dll the next time they compile the project. You can also update the dll without having to recompile the projects that use it (though you can't change the names/signatures of anything that is being used by the project).

Dll reference of one project into another project

I have 2 projects, one built in VB.NET and another in C#.NET. I want to use certain functionality of VB.NET into C#.NET and hence I have added the dll file of VB.NET solution into C#.NET as a reference by browsing the dll from my system.
Say dll name for VB.NET is myData.dll
In my C#.NET project I am trying to declare it as a namespace i.e. "using myData;" and its giving me an error of "Type or namespace name could not be found"
Am I missing something??
A clue about how your VB.NET project is organized. There are some things that can go wrong and you obviously are not aware of them, so lets find out.
According to our information the dll is added as reference.
Say dll name for VB.NET is myData.dll
Ok, so that is the DLL and you reference it.
declare it as a namespace i.e. using myData;
No, you do NOT declare "it as a namespace". You tell the compiler to also look in this namespace for classes. Now, you do NOT tell to compiler whether myData.dll actually contains the namespace myData. This is a totally different thing. You can do without using - if you prefix every class. Nothing in the using statement references a dll.
It could be VB.NET has wrapped another namespace around and it is myData.myData. No joke. It could also be you forgot to make the classes public.
To find out:
Open the DLL using Object Browser ("View", "ObjectBrowser") and look what namespace and classes are in the DLL.
Go and look for the class you want to use and see what it says there. You may be surprised about the classes and / or the namespace.

call F# dll in C#

How can I create F# dll and call it in C#?
Thank you
To create a DLL in F#, you should set the output type to class library in project properties. Use Add Reference dialog as mentioned before to add the reference in your C# project.
There's no real trick; like
http://lorgonblog.spaces.live.com/blog/cns!701679AD17B6D310!307.entry
only the other way around. One thing to note is that if you don't specify a namespace in the F# code, all your top-level definitions by default end up in a module with the name of the file, so if you have Program.fs then you may reference Program.Whatever from C#.
If you are using the latest version, all you should need to do is set the project type to 'F# Library' when you create the project.

Categories