As the name suggests, the C# syntax is based on the core C programming language originally developed by Dennis Ritchie at Bell Labs (AT&T) in the 1970s.
[3] BASIC (Beginner's All-purpose Symbolic Instruction Code) was developed in the 1960s as a method to overcome the difficulties of using assembly language written for processor-specific and/or brand name specific mainframes and hardware.
Code became "portable" due to the compiler, and in fact, both Visual Basic .NET and C# use the same CLR (Common Language Runtime) today.
In the early 1980s, the language was picked up by Microsoft and expanded significantly beyond its original intent into their "Visual Basic" language/platform that was sold throughout the 1990s as a "rapid application development" (RAD) tool for Windows programming.
Developers will notice that VB 15 (first appearing in Visual Studio 2017) lacks certain language capabilities contained in the new C# 7.3.
[8] Although there are some differences in the programming constructs (discussed further below), their differences are primarily syntactic and, assuming one avoids the Visual Basic "Compatibility" libraries provided by Microsoft to aid conversion from VB6, almost every command in VB has an equivalent command in C# and vice versa.
As a result, with few exceptions, a program written in either language can be run through a simple syntax converter to translate to the other.
The only fundamental differences between the languages can be found in the implementation of interfaces and in the declaration, raising and handling of events.
With each subsequent release of Visual Studio, the differences between development environments for these languages have been reduced.
Refactoring large projects in C# is made more difficult by the need to frequently rebuild the solution in order to highlight compilation errors.
[10] This is a particular advantage with large projects and can significantly reduce the time required to start debugging in the IDE.
Although the default is for Option Strict to be off for backward compatibility reasons, it is recommended by Microsoft[15] and widely considered to be good practice to turn Option Strict on, due to the fact that it increases application performance and reduces the possibility of naming errors and other programming mistakes.
In C#, the braces, {}, are used to delimit blocks, which is more familiar to programmers with experience in other widely deployed languages such as C++ and Java.
J# is a language mainly designed to ease transition of Java applications to the .NET framework; it allows developers to leave much of their Java or J++ code unchanged while still running it in the .NET framework, thus allowing them to migrate small pieces of it into another .NET language, such as C#, individually.
For example, Visual Studio 2005 Team System supports automatic generation of Unit Tests in C#, VB.Net, and C++, but excludes J#.
J# has been discontinued and is not included in Visual Studio 2008 or newer versions, since the existing J# feature set largely meets customer needs and usage of J# is declining.
Code obfuscators are often used to guard against this, and operate by directly modifying the CIL of an assembly in order to make it difficult or impossible to de-compile to a higher level .NET language.