.NET의 언어 간 상속에 대한 소개입니다.
.NET의 도입으로 언어 개발이 그 어느 때보다 간편해졌습니다. 더 이상 C++에서 ATL 래퍼를 사용하여 VB 구성 요소에 액세스하거나 FORTRAN 코드와 인터페이스하려고 할 때 규칙을 호출하는 것에 대해 걱정할 필요가 없습니다. 모든 .NET 지원 언어는 이제 최고 수준의 엔터티이며 원활하게 상호 운용되므로 서로 다른 시스템이 그 어느 때보다 쉽게 함께 작동할 수 있으며 다양한 기술을 가진 개발자가 프로젝트에서 조화롭게 함께 작업할 수 있습니다.
한 언어로 다른 언어에서 사용할 수 있는 구성 요소를 만드는 것은 매우 간단합니다. Visual Studio.NET 마법사를 사용하여 원하는 .NET 언어로 클래스 라이브러리를 만들고 컴파일하면 작업이 완료됩니다.
예를 들어 C#에서 두 가지 메서드를 노출하는 간단한 클래스를 만듭니다.
namespace MyCSClass
{
using System;
public class CSClass
{
public CSClass () { }
// returns the length of the passed string
public int MyMethod (string str)
{
return str. Length ;
}
// returns n squared
virtual public int MyVirtualMethod ( int n)
{
return n*n;
}
}
}
첫 번째 메서드인 MyMethod
문자열 개체를 가져와 해당 길이를 반환합니다. 두 번째 메서드는 가상이며 전달된 숫자의 제곱을 반환합니다. 이 구성 요소를 MyCSClass.dll 로 컴파일했다고 가정합니다.
관리되는 C++를 사용하여 이 구성 요소를 사용하려면 먼저 어셈블리를 프로그램으로 가져와야 합니다.
# using " MyCSClass.dll "
그게 다야. typelib도 없고, .def 파일도 없고, ATL 헤더도 없습니다. 우리는 단순히 #using
문을 사용하고(dll이 컴파일러 검색 경로에 있는지 확인하고) 컴파일러가 나머지 작업을 수행하도록 합니다.
클래스를 가져온 후에는 using
선언을 사용하여 입력을 저장할 수 있습니다.
using namespace MyCSClass ;
여기서 차이점을 참고하세요. #using
어셈블리를 프로젝트로 가져오는 데 사용됩니다. using
작업할 네임스페이스를 지정하고 입력을 저장하기만 합니다.
실제로 클래스를 사용하는 것은 .NET에서 다른 관리되는 참조 유형을 사용하는 것과 동일합니다.
CSClass *cs = new CSClass();
int result;
result = cs-> MyMethod ( " Hello World " ); // will return 11
result = cs-> MyVirtualMethod ( 2 ); // will return 2 squared
언어 간 상호 운용성은 단순히 다른 언어로 작성된 구성 요소의 사용을 용이하게 하는 것 이상입니다. 또한 구성 요소의 원본 소스 코드가 필요 없이 다른 언어로 작성된 구성 요소에서 새 클래스를 상속할 수도 있습니다.
당신이 사용하기를 좋아하지만 한두 가지 기능이 더 있었으면 좋겠다거나 약간 다른 기능을 제공하는 매우 멋진 구성 요소를 구입했거나 획득했다고 상상해 보십시오. .NET에서는 해당 구성 요소에서 새 클래스를 상속하여 원하는 대로 정확하게 작동하는 새 구성 요소를 만들 수 있습니다. 구성 요소에 대한 래퍼를 만드는 것이 아닙니다. 해당 속성, 메서드 및 필드를 파생하고 이전 구성 요소의 가상 메서드를 재정의하고 새 메서드를 추가할 수 있는 새 구성 요소를 만드는 것입니다.
우리의 예로 돌아갑니다. CSClass::MyVirtualMethod
메서드는 가상이므로 이 C# 클래스에서 파생된 새 C++ 클래스를 선언하고 해당 가상 메서드를 재정의해 보겠습니다.
__gc class CPPClass : public MyCSClass ::CSClass
{
public:
// returns the cube of the given number
virtual int MyVirtualMethod ( int n)
{
return n*n*n;
}
};
주어진 숫자의 제곱이 아닌 큐브를 반환하는 새로운 메서드로 CSClass::MyVirtualMethod
재정의했습니다. 코드를 컴파일하면 C# 클래스의 가상 메서드를 재정의하고 가상이 아닌 MyMethod()
함수도 포함하는 새로운 C++ 구성 요소가 생성됩니다.
CPPClass *cpp = new CPPClass();
int result;
result = cpp-> MyMethod ( " Hello World " ); // will return 11
result = cpp-> MyVirtualMethod ( 2 ); // Will output 2 cubed, not 2 squared
이 기사와 함께 제공되는 다운로드에는 C# 및 C++ 구성 요소에서 사용하고 상속하는 VB.NET 구성 요소가 포함되어 있습니다.
언어 간 상호 운용성을 통해 객체 지향 방식으로 고유한 기능을 사용하여 타사 구성 요소를 확장할 수 있습니다. CLS 호환 언어로 구성 요소를 사용하여 쉽게 작업할 수 있으며, 디버깅할 때 동일한 응용 프로그램의 구성 요소 간 및 언어 간 함수 호출을 단계별로 수행할 수 있습니다. 예외 처리는 언어 전반에 걸쳐 일관됩니다. 한 언어의 구성 요소에서 예외가 발생하면 다른 언어로 작성된 코드로 이를 포착하고 처리할 수 있습니다. 가장 중요한 것은 귀하와 귀하의 팀이 작업하려는 언어를 자유롭게 선택할 수 있다는 것입니다.
2001년 10월 16일 - 베타 2용으로 업데이트됨