2017-11-20 1 views
1

주어진 구조가 구조적으로 동일한 지 알아보기 위해 알고리즘을 사용해야하는 프로젝트를 수행하고 있습니다. 이를 위해 다음과 같은 클래스에서 예제가 제공되었습니다.vb.net에서 정의하기 전에 구조체를 선언하는 방법

T1 = struct {a: int, p: pointer to T2} 
T2 = struct {c: int, q: pointer to T3} 
T3 = struct {a: float, p: pointer to T1} 

알고리즘은 구조적으로 서로 같지 않다고 말합니다. 우리 부분은 C++에서 알고리즘을 구현하는 것입니다. 우리의 선택에 따라 언어가 VB.net입니다. 파일과 구조가 구조적으로 동일한 것입니다.

우선 포인터는 vb.net에서 정의되지 않습니다. 그래서 그 부분을 떠난다지만 포인터 대신 변수를 선언 할 수 있습니까? 예를 들어,

T1 = struct {a: int, p: T2} 
T2 = struct {c: int, q: T3} 
T3 = struct {a: float, p: T1} 

이 (참, 우리가 너무 입력 파일을 쓰기) vb.net에서 이러한 구조를 코딩 구조가 이미 사전 정의해야합니다. 그래서 가능합니까? 그렇다면 어떻게?

+0

난 당신이 여기 vb.net으로 뭘 하려는지 이해가 안 돼요. 시도한 것을 샘플로 게시 할 수 있습니까? – djv

답변

0

작업이 입력 언어를 실제로 구문 분석합니까? 이것은 .NET에서 복잡한 구문을 수행하지 않고 런타임에 컴파일 된 형식을 분석 할 수있는 Reflection이라는 기술이있는 반면 매우 복잡한 작업입니다. C++ for .NET과 Reflection을 사용하면 많은 작업을 줄일 수 있습니다. VB 어셈블리를 동적으로로드해야합니다. 참조 : Programming with Reflection in the .NET Framework Using Managed C++

VB (및 C#도 마찬가지 임)는 포인터가 있지만 참조는 사용하지 않습니다. 참조는 포인터의 고차원 추상화 일뿐입니다. 포인터를 메모리의 참조 위치로 생각하는 반면, 참조는 객체를 가리키는 변수 일뿐입니다. GC (가비지 수집기)가 메모리를 회수하고 다시 구성 할 때 객체의 실제 주소는 변경 될 수 있지만 참조는 여전히 동일합니다.

구조체는 값 유형이므로 T1 = struct {a: int, p: T2} 필드의 p은 참조가 아닙니다. 그 대신에 T2 (구조체)가 T1에 임베드되어 있습니다! 참조가 필요하면 대신 클래스를 사용하십시오.

VB에서 참조 유형의 변수는 자동으로 참조입니다. 이 참조 (예 : * 또는 ->)를 따르는 특별한 구문은 없으며 도트 구문 만 있습니다.

Dim p As Person ' p is a reference. 
p = New Person() 
Console.WriteLine(p.LastName); 

관련 항목 :

관련 문제