2010-04-02 3 views
1

누군가가 왜 C# 언어를 만든 위대한 Microsoft와 이제는 C# 4.0에있는 에 C++ \ CLI에있는 중요한 기능이 없다고 말할 수 있습니까? 이것은 직접 컴파일하고 링크하는 것입니다. un-managed C++와 함께 ??닷넷의 비 관리 C++

답변

3

C#은 다른 언어입니다. 사용자 커뮤니티에 유용하기 위해 다른 언어의 모든 기능을 포함 할 필요는 없습니다. 특히 C# 4.0은 동적 (스크립팅) 언어에서 피처를 흡수하여 C++의 반대 방향으로 이동하는 것이 중요했습니다. 또한 C#이 C/C++ (예 : 포인터)와 기능을 공유하는 경우 특수한 "안전하지 않은"모드로 구분되어 대개 바람직하지 않음을 나타냅니다.

또한 .NET은 다중 언어 플랫폼이므로 모든 언어가 다른 언어의 모든 기능을 포함 할 필요는 없습니다. 그들은 어쨌든 쉽게 서로를 부를 수 있습니다.

C++과 C#은 근본적으로 많은 키워드와 연산자의 의미에서 서로 동의하지 않습니다. (.이 통합하기 힘들하려고 세미콜론 (임의로 변수 선언 쉼표로 구분 앞에) 그 후 여부를 가질 것인지 여부 차치)

class C { } 

예 :

C는 관리되지 않는 메모리로 할당되어 GC에 고정 될 필요없이 다른 네이티브 코드로 전달 될 수있는 네이티브 C++ 클래스 여야합니까? 또는 다른 .NET 라이브러리로 전달 될 수있는 .NET 클래스 여야합니까? C에 대한 참조를 선언하거나 C의 인스턴스를 생성

C c; 

해야합니다

또는 방법에 대한

?

또는 방법에 대한 : 네이티브 C++ 힙 또는 GC의 .NET 힙에 할당

new C() 

해야합니까?

C++/CLI에서이 모든 질문을 해결해야합니다. 이전 버전에서 발생한 혼란으로부터 배우면 Microsoft는 new 대신 gcnew과 같은 다른 키워드를 사용하여 C++/CLI 내에서 두 세계를 명확하게 구분했습니다.

C#에서 오늘과 같이 C++을 컴파일 할 수있게하려는 경우 기존 C# 프로그램과의 호환성을 깨고 C#의 기본 기능인 많은 작업의 이름을 변경해야합니다.

요점은 무엇입니까?

+0

예. .NET은 다국어 플랫폼이지만 C#은 모두 앞에 있으므로 C#에서 기대할 수 있습니다. C#에서 기본 매개 변수를 얻었습니다. VB에서는 VB 기능 (C++에서 가져온 것)이있었습니다. .. – Robocide

+2

"우리"는 누구입니까? 나 자신을 위해 말하면 .NET은 다국 언어 플랫폼이므로 여러 언어를 자신의 틈새에서 지원할 것으로 기대합니다. C#의 틈새 시장에는 "C++의 수퍼 셋"이 포함되어 있지 않습니다. –

0

C#은 관리되는 코드이며 관리되는 코드를 작성하는 데 사용하기위한 것이므로 C++/CLI는 관리되지 않는 C/C++ 코드를 직접 연결해야하는 사람들을위한 간격을 메우기 위해 이미 존재합니까?

DllImport/PInvoke 이외의 네이티브 인터링크 지원이 필요한 이유가 확실하지 않습니다. 뭐든지 더 많은 것들과 약간의 구문 차이를 가지고 C++/CLI를 다시 만들 것입니다.

+1

어떤 사람들 C++/CLI이 그 VB.NET 대 C#을 뒤에 이야기라고보기가 너무 ;-) – Joey

0

PInvoke으로 C++ 코드를 호출 할 수 있습니다. 예를 들어 동일하지 않은 경우에도 마찬가지입니다.

+0

예 그러나 예 : 내가는 C와 necessery되지는 등의 관리 버전의 모든 일치하는 구조체를 구현해야합니다 ++ C++/CLI를 통한 Interop. – Robocide

0

관리되는 코드와 분리되지 않은 코드가 분리되어 있기 때문입니다. 망가 코드는 CLR에서 실행되지만 관리되지 않는 코드는 CLR에서 실행됩니다. P/Invoke를 사용하여 관리 코드와 비 관리 코드를 연결할 수 있습니다.

이것은 잠재적으로 관리되는 세계와 정보를 마샬링하는 데 도움이됩니다.

+0

예 : 예 : 그렇다면 C++/CLI를 통해 C++ Interop의 필수 항목이 아닌 관리되는 버전의 모든 일치하는 구조체를 구현해야합니다. – Robocide

+0

왜 mC++를 사용하지 않는 것이 좋을까요? –

0

관리되는 코드에서 관리되지 않는 C++을 호출 할 수 있으며 관리되지 않는 C++에서 관리되는 코드를 호출 할 수 있습니다. , PInvoke

+1

네,하지만 예를 들어 C#에서 네이티브 C++을 호출하는 경우 : C++/CLI를 통해 C++ Interop의 필수 항목이 아닌 관리되는 버전의 모든 일치하는 구조체를 구현해야합니다. – Robocide