{{위키데이터 속성 추적}}
{{프로그래밍 언어의 비교}}
[[시 샤프|C#]]와 [[비주얼 베이직 닷넷]]은 [[닷넷 프레임워크]]에서 사용되는 두 개의 주된 [[프로그래밍 언어|언어]]이다.

== 언어 적합성 ==
C#는 구문 유사성을 자바와 공유한다. C#와 비주얼베이직 닷넷 모두 현대적 고급 언어인 [[자바와 C++의 비교|자바와 C++는 구조상의 유사성]]을 지닌다. 그러나 자바와 닷넷의 차이점은 많으며, [[자바와 C 샤프의 비교]]에서 볼 수 있다.

== 런타임 다중 언어 지원 ==
닷넷의 주요 목표 중 하나는 다중 언어 지원이다. 디자인의 목적은 모든 [[마이크로소프트]] 언어는 모든 [[운영 체제]] 특징으로 같은 단계의 엑세스를 가져야 하고 같은 단계의 힘과 [[유용성]]과 다른 언어에서 쓰여진 모듈로부터 간단한 요청을 보여 주어야 한다는 것이다. 모든 닷넷 프로그램 언어는 같은 런타임 엔진과 동일한 [[추상 구문 트리]]와 [[공통 중간 언어]]를 공유한다. 게다가 모든 닷넷 언어는 가비지 컬렉션과 교차 언어 상속, [[예외 처리]]와 [[디버깅]]을 포함한 플랫폼 특징에 엑세스할 수 있다. 이것은 다른 닷넷 언어로부터 생산된 바이너리는 같음을 허락한다.

== 개발 환경 ==

비주얼 스튜디오는 C#과 VB.Net의 개발 환경의 몇몇 차이점을 대비한다.비주얼 스튜디오가 발표됨으로써, 이 개발 환경 간의 차이는 줄여졌다.
예를 들면 초기의 비주얼 스튜디오는 C#을 비주얼 베이직으로 변환하는 지원이 매우 좋지 않았고 C#에 대한 백그라운드 변환을 제공하지 않았다.<ref name="advbasics">{{웹 인용 | url = http://msdn.microsoft.com/msdnmag/issues/05/06/AdvancedBasics/ | title = Scaling Up: The Very Busy Background Compiler | author = Matthew Gertz | publisher = [[MSDN Magazine]] | accessdate = 2008-12-16 | 보존url = https://web.archive.org/web/20080219185814/http://msdn.microsoft.com/msdnmag/issues/05/06/AdvancedBasics/# | 보존날짜 = 2008-02-19 | url-status = dead }}</ref>.

하지만, 비주얼 베이직 6에서 비주얼 베이직 닷넷으로 되면서 다음과 같은 특징이 더해졌다.

* 기본 네임스페이스는 숨겨짐(해제 가능)
* 몇몇 프로젝트 파일은 숨길 수 있음(사용자가 보이게 할 수 있음)

=== C#에 없는 비주얼 베이직 닷넷의 특징 ===
* 변수를 <code>WithEvents</code> 구조체를 사용하여 선언할 수 있다. 이 구조는 프로그래머는 '클래스 이름' 목록에서 개체를 선택할 수 있도록 선언에서 메서드를 선택하고 자동 삽입 메서드 서명을 가진 목록을 사용할 수 있도록 한다
* 이벤트의 자동 wireup에 의해, 비주얼 베이직 닷넷은 이벤트에 대한 핸들 구문을 가지고 있다

=== 비주얼 베이직 닷넷에 없는 C#의 특징 ===
* <code>unsafe</code> 키워드로 안전하지 않는 코드의 블록(C++/CLI 같이)을 허용한다.
* 불완전한 인터페이스
* 반복자와 <code>yield</code> 키워드
* 멀티 라인 주석(비주얼 스튜디오 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")

=== 주석 사용 ===

{| class="wikitable"
|-
! [[C 샤프|C#]]
! [[Visual Basic .NET]]
|-
|<syntaxhighlight lang="csharp">
//한줄 주석
/*여러줄 주석
  line 2
  line 3*/

///XML 한줄 주석

/**XML 여러줄 주석
   line 2
   line 3*/
</syntaxhighlight>
|<syntaxhighlight lang="vbnet">
'한줄 주석
</syntaxhighlight>

두줄 이상의 주석은 불가능
<syntaxhighlight lang="vbnet">
'''XML 한줄 주석
</syntaxhighlight>

두줄 이상의 주석은 불가능
|}

=== 조건식 ===

{| class="wikitable"
![[C 샤프|C#]]
![[Visual Basic .NET]]
|-
|
<syntaxhighlight lang=csharp>
if (condition)
{
    // condition is true
}
</syntaxhighlight>
|
<syntaxhighlight lang=vbnet>
If condition Then
    ' condition is true
End If
</syntaxhighlight>
|-
|
<syntaxhighlight lang=csharp>
if (condition)
{
    // condition is true
}
else
{
    // condition is false
}
</syntaxhighlight>
|
<syntaxhighlight lang=vbnet>
If condition Then
    ' condition is true
Else
    ' condition is false
End If
</syntaxhighlight>
|-
|
<syntaxhighlight lang=csharp>
if (condition)
{
    // condition is true
}
else if (othercondition)
{
    // condition is false and othercondition is true
}
</syntaxhighlight>
|
<syntaxhighlight lang=vbnet>
If condition Then
    ' condition is true
ElseIf othercondition Then
    ' condition is false and othercondition is true
End If
</syntaxhighlight>
|-
|
<syntaxhighlight lang=csharp>
if (condition)
{
    // condition is true
}
else if (othercondition)
{
    // condition is false and othercondition is true
}
else
{
    // condition and othercondition are false
}
</syntaxhighlight>
|
<syntaxhighlight lang=vbnet>
If condition Then
    ' condition is true
ElseIf othercondition Then
    ' condition is false and othercondition is true
Else
    ' condition and othercondition false
End If
</syntaxhighlight>
|}

=== 루프 ===

{| class="wikitable"
![[C 샤프|C#]]
![[Visual Basic .NET]]
|-
|
<syntaxhighlight lang=csharp>
for (int i = 0; i <= number - 1; i++)
{
    // loop from zero up to one less than number
}
</syntaxhighlight>
|
<syntaxhighlight lang=vbnet>
For i = 0 To number - 1
    ' loop from zero up to one less than number
Next i
</syntaxhighlight>
|-
|
<syntaxhighlight lang=csharp>
for (int i = number; i >= 0; i--)
{
    // loops from number down to zero
}
</syntaxhighlight>
| 
<syntaxhighlight lang=vbnet>
For i = number To 0 Step -1
    ' loops from number down to zero
Next i
</syntaxhighlight>
|-
|
<syntaxhighlight lang=csharp>
break; //breaks out of a loop
</syntaxhighlight>
| 
<syntaxhighlight lang=vbnet>
Exit For 'breaks out of a for loop
</syntaxhighlight>
<syntaxhighlight lang=vbnet>
Exit While 'breaks out of a while loop
</syntaxhighlight>
<syntaxhighlight lang=vbnet>
Exit Do 'breaks out of a do loop
</syntaxhighlight>
|}

=== 비교 ===
==== 원시 타입 ====
{| class="wikitable"
![[C 샤프|C#]]
![[Visual Basic .NET]]
|-
|
<syntaxhighlight lang=csharp>
if (a == b)
{
    // equal
}
</syntaxhighlight>
|
<syntaxhighlight lang=vbnet>
If a = b Then
    ' equal
End If
</syntaxhighlight>
|-
|
<syntaxhighlight lang=csharp>
if (a != b)
{
    // not equal
}
</syntaxhighlight>
Or:
<syntaxhighlight lang=csharp>
if (!(a == b))
{
    // not equal
}
</syntaxhighlight>
| 
<syntaxhighlight lang=vbnet>
If a <> b Then
    ' not equal
End If
</syntaxhighlight>
Or:
<syntaxhighlight lang=vbnet>
If Not a = b Then
    ' not equal
End If
</syntaxhighlight>
|
|-
|
<syntaxhighlight lang=csharp>
if (a == b && c == d || e == f)
{
    // multiple comparisons
}
</syntaxhighlight>
| 
<syntaxhighlight lang=vbnet>
If a = b And c = d Or e = f Then
    ' multiple comparisons
End If
</syntaxhighlight>
|
|-
|
<syntaxhighlight lang=csharp>
if (a == b && c == d || e == f)
{
    // short-circuiting comparisons
}
</syntaxhighlight>
|
<syntaxhighlight lang=vbnet>
If a = b AndAlso c = d OrElse (e = f) Then
    ' short-circuiting comparisons
End If
</syntaxhighlight>
|-
|
|}

==== 개체 유형 ====

{| class="wikitable"
![[C 샤프|C#]]
![[Visual Basic .NET]]
|-
|
<syntaxhighlight lang=csharp>
if (Object.ReferenceEquals(a, b))
{
    // variables refer to the same instance
}
</syntaxhighlight>
|
<syntaxhighlight lang=vbnet>
If a Is b Then
    ' variables refer to the same instance
End If
</syntaxhighlight>
|-
|
<syntaxhighlight lang=csharp>
if (!Object.ReferenceEquals(a, b))
{
    // variables do not refer to the same instance
}
</syntaxhighlight>
|
<syntaxhighlight lang=vbnet>
If a IsNot b Then
    ' variables do not refer to the same instance
End If
</syntaxhighlight>
|-
|
<syntaxhighlight lang=csharp>
if (a.Equals(b))
{
    // 인스턴트가 동등하다.
}
</syntaxhighlight>
|
<syntaxhighlight lang=vbnet>
If a = b Then
    ' 인스턴트가 동등하다.
End If
</syntaxhighlight>
|-
|
<syntaxhighlight lang=csharp>
if ( ! a.Equals(b))
{
    // 인스턴트가 동등하지 않다.
}
</syntaxhighlight>
| 
<syntaxhighlight lang=vbnet>
If a <> b Then
    ' 인스턴트가 동등하지 않다.
End If
</syntaxhighlight>
|-
|
<syntaxhighlight lang=csharp>
var type = typeof(int);
</syntaxhighlight>
|
<syntaxhighlight lang=vbnet>
Dim type = GetType(Integer)
</syntaxhighlight>
|-
|
<syntaxhighlight lang=csharp>
if (a is b)
{
    // types of a and b are compatible
}
</syntaxhighlight>
|
<syntaxhighlight lang=vbnet>
If TypeOf a Is b Then
    ' types of a and b are compatible
End If
</syntaxhighlight>
|-
|
<syntaxhighlight lang=csharp>
if (!(a is b))
{
    // types of a and b are not compatible
}
</syntaxhighlight>
|
<syntaxhighlight lang=vbnet>
If Not TypeOf a Is b Then
    ' types of a and b are not compatible
End If
</syntaxhighlight>
|}
{| class="wikitable"
|-
|<blockquote>

;C#:
<syntaxhighlight lang=csharp>
if(object.equals(a,b))
</syntaxhighlight>
;VB.NET:
<syntaxhighlight lang=vbnet>
If a = b Then
</syntaxhighlight>
</blockquote>
|}
<syntaxhighlight lang=csharp>
// converting from Gregorian to Persian date
Persia.Calendar.ConvertToPersian(DateTime dateTime);
Persia.Calendar.ConvertToPersian(int year, int month, int day, Persia.DateType.Gerigorian);

// converting from Islamic to Persian date
Persia.Calendar.ConvertToPersian(Persia.MoonDate moonDate);
Persia.Calendar.ConvertToPersian(int year, int month, int day, Persia.DateType.Islamic);

</syntaxhighlight>

==   zx1 ==
<references/>
 N mm mm  2   .ry up I

== 외부 링크 ==
* [http://msdn.microsoft.com/en-us/library/czz35az4(v=VS.100).aspx Microsoft Visual Studio Language Equivalents 2003-2010]
* [https://web.archive.org/web/20080409211525/http://msdn2.microsoft.com/en-us/library/522xhsa3(VS.80).aspx Microsoft VSTO Programming with Visual Basic Versus C#]
* [https://web.archive.org/web/20080705061024/http://www.codeproject.com/dotnet/vbnet_c__difference.asp CodeProject VB vs C#]
* [https://web.archive.org/web/20081123052154/http://www.harding.edu/USER/fmccown/WWW/vbnet_csharp_comparison.html Syntactical differences between C# and VB.NET]
* [http://www.developerfusion.com/tools/convert/csharp-to-vb/ C#에서 비주얼 베이직 닷넷으로 번역하는 무료 온라인 사이트(영문)]
* [http://www.developerfusion.com/tools/convert/vb-to-csharp/ 비주얼 베이직 닷넷에서 C#으로 번역하는 무료 온라인 사이트(영문)]
* [https://web.archive.org/web/20110707112517/http://www.all4dotnet.com/convertcode.aspx 무료 온라인 VB.NET과 C#간의 상호 변환기]
* [https://web.archive.org/web/20101226123911/http://blog.gadodia.net/extension-methods-in-vbnet-and-c/ Extension Method Handling - C# vs VB.NET]

{{닷넷 프레임워크}}

[[분류:닷넷 프레임워크]]
[[분류:프로그래밍 언어의 비교]]
[[분류:베이직 프로그래밍 언어 계열]]
[[분류:C 프로그래밍 언어 계열]]