Hi,
There are a lot of question here, but I'll try to answer as best I can.
"...should I add all dll of these or its source code?"
Unless the dll is very large and you need just a snippet of the code, add the whole dll. There's no point stirring up the silt. Keep you code modular.
"1.what is the difference between adding just dll file and adding source code of that particular dll?"
If you add the source code in the form of a project there is functionally no difference. Each project in your solution compile to single dlls (or exe's or whatnot). It is only useful for debugging so you can understand what happens in the dll at run-time.
"2.How can we add more features in to dll source code?"
You could, but don't. There's no need. You can create an API (middle-ware) dll that extends the functionality of the first and projects the core functionality you need. This is a very tidy way to code. Unless they have sealed the classes, you can inherit from them to add functionality.
"3.Is there any thing like JAR file in .NET??"
Sort of, but not really. It is possible to encase your assemblies (dlls etc) into something like a cab file, but there isn't any need.
Jar files take .java files and put them into a single file. .Net compile all .cs files into a single assembly (eg dll) anyway.
"4.NuGet is just like that?"
NuGet is a way for devs to "package" assemblies. This only means that they can ensure dependency assemblies are present. It still downloads each assembly separately. Look at packages.config in your project. This is used by nuget and VS to ensure that the relevant assemblies are downloaded before it compiles.
I hope that helps. If you have any questions about these answers then please comment below
Good luck ^_^
Andy
UPDATE: Answer to "How can I add features to a dll.
A dll or Dynamic Link Library is just another assembly. An assembly contains classes. Take a look at the example project below:
Project Base
namespace Base
{
private class ThisIsPrivate{}
public sealed class ThisIsSealed{
public int GetInt()
{
}
}
public class ThisIsInheritable
{
public string CreateFileContent()
{
}
public virtual bool SaveFile(string fileContent)
{
}
}
}
Imagine that this assembly is in a file called Base.dll. Some of the classes we can extend, some we can't:
MyExtendingClass:
public sealed class ThisIsSealed{
Base.ThisIsSealed baseSealed = new Base.ThisIsSealed();
public int GetInt(){
return baseSealed.GetInt();
}
public int IntPlusInt(int p){
return baseSealed.GetInt() + p;
}
}
public class ThisIsInheritable:Base.ThisIsInheritable{
new public string CreateFileContent(){
return base.CreateFileContent();
}
public override bool SaveFile(string fileContent){
return base.SaveFile(fileContent);
}
public bool CreateAndSaveFile(){
return base.SaveFile(CreateFileContent());
}
}
I hope that clarifies things
Andy