C#는 구문 유사성을 자바와 공유한다. C#와 비주얼베이직 닷넷 모두 현대적 고급 언어인 자바와 C++는 구조상의 유사성을 지닌다. 그러나 자바와 닷넷의 차이점은 많으며, 자바와 C 샤프의 비교에서 볼 수 있다.
런타임 다중 언어 지원
닷넷의 주요 목표 중 하나는 다중 언어 지원이다. 디자인의 목적은 모든 마이크로소프트 언어는 모든 운영 체제 특징으로 같은 단계의 엑세스를 가져야 하고 같은 단계의 힘과 유용성과 다른 언어에서 쓰여진 모듈로부터 간단한 요청을 보여 주어야 한다는 것이다. 모든 닷넷 프로그램 언어는 같은 런타임 엔진과 동일한 추상 구문 트리와 공통 중간 언어를 공유한다. 게다가 모든 닷넷 언어는 가비지 컬렉션과 교차 언어 상속, 예외 처리와 디버깅을 포함한 플랫폼 특징에 엑세스할 수 있다. 이것은 다른 닷넷 언어로부터 생산된 바이너리는 같음을 허락한다.
개발 환경
비주얼 스튜디오는 C#과 VB.Net의 개발 환경의 몇몇 차이점을 대비한다.비주얼 스튜디오가 발표됨으로써, 이 개발 환경 간의 차이는 줄여졌다.
예를 들면 초기의 비주얼 스튜디오는 C#을 비주얼 베이직으로 변환하는 지원이 매우 좋지 않았고 C#에 대한 백그라운드 변환을 제공하지 않았다.[1].
하지만, 비주얼 베이직 6에서 비주얼 베이직 닷넷으로 되면서 다음과 같은 특징이 더해졌다.
기본 네임스페이스는 숨겨짐(해제 가능)
몇몇 프로젝트 파일은 숨길 수 있음(사용자가 보이게 할 수 있음)
C#에 없는 비주얼 베이직 닷넷의 특징
변수를 WithEvents 구조체를 사용하여 선언할 수 있다. 이 구조는 프로그래머는 '클래스 이름' 목록에서 개체를 선택할 수 있도록 선언에서 메서드를 선택하고 자동 삽입 메서드 서명을 가진 목록을 사용할 수 있도록 한다
이벤트의 자동 wireup에 의해, 비주얼 베이직 닷넷은 이벤트에 대한 핸들 구문을 가지고 있다
비주얼 베이직 닷넷에 없는 C#의 특징
unsafe 키워드로 안전하지 않는 코드의 블록(C++/CLI 같이)을 허용한다.
불완전한 인터페이스
반복자와 yield 키워드
멀티 라인 주석(비주얼 스튜디오 IDE는 Visual Basic .NET의 멀티 라인 주석을 지원한다.)
정적 클래스(클래스는 비정적 클래스를 포함할 수 없다, although VB's Modules are essentially sealed static classes with additional semantics)
키워드
비주얼 베이직은 대소문자를 구별하지 않으며 이것은 키워드에서 어떠한 대소문자 조합도 받아들여짐을 의미한다. 하지만 비주얼 스튜디오는 자동으로 모든 비주얼 베이직 키워드를 일반적인 대소문자 형태로 맞춰준다. (예: "Public", "If")
C#은 대소문자를 구별하며 모든 C# 키워드는 소문자로만 이루어져 있다.
비주얼 베이직과 C#은 대부분의 키워드를 공유한다. 비주얼 베이직의 키워드들은 대소문자 형태가 갖추어진 C# 키워드이다. (예: "Public"과 "public", "If"와 "if")
if(condition){// condition is true}else{// condition is false}
IfconditionThen' condition is trueElse' condition is falseEndIf
if(condition){// condition is true}elseif(othercondition){// condition is false and othercondition is true}
IfconditionThen' condition is trueElseIfotherconditionThen' condition is false and othercondition is trueEndIf
if(condition){// condition is true}elseif(othercondition){// condition is false and othercondition is true}else{// condition and othercondition are false}
IfconditionThen' condition is trueElseIfotherconditionThen' condition is false and othercondition is trueElse' condition and othercondition falseEndIf
if(Object.ReferenceEquals(a,b)){// variables refer to the same instance}
IfaIsbThen' variables refer to the same instanceEndIf
if(!Object.ReferenceEquals(a,b)){// variables do not refer to the same instance}
IfaIsNotbThen' variables do not refer to the same instanceEndIf
if(a.Equals(b)){// 인스턴트가 동등하다.}
Ifa=bThen' 인스턴트가 동등하다.EndIf
if(!a.Equals(b)){// 인스턴트가 동등하지 않다.}
Ifa<>bThen' 인스턴트가 동등하지 않다.EndIf
vartype=typeof(int);
Dimtype=GetType(Integer)
if(aisb){// types of a and b are compatible}
IfTypeOfaIsbThen' types of a and b are compatibleEndIf
if(!(aisb)){// types of a and b are not compatible}
IfNotTypeOfaIsbThen' types of a and b are not compatibleEndIf
C#
if(object.equals(a,b))
VB.NET
Ifa=bThen
// converting from Gregorian to Persian datePersia.Calendar.ConvertToPersian(DateTimedateTime);Persia.Calendar.ConvertToPersian(intyear,intmonth,intday,Persia.DateType.Gerigorian);// converting from Islamic to Persian datePersia.Calendar.ConvertToPersian(Persia.MoonDatemoonDate);Persia.Calendar.ConvertToPersian(intyear,intmonth,intday,Persia.DateType.Islamic);