2014-10-30 8 views
-1

CLR을 사용하면 Castclass 조작이 수행되었는지 여부에 관계없이 개체 참조가있는 필드를 설정할 수 있습니다. 스택 맨 위에있는 객체 참조가 approperiate 유형인지 확실하다면 필드를 설정하는 것이 좋습니까? 그렇다면 Castclass은 컴파일러에서 사용하는 안전 기능입니까?Castclass OpCode가 필요합니까?

+0

[OpCodes.Castclass. 필요한가요?] (http://stackoverflow.com/questions/6265453/opcodes-castclass-is-it-necessary) –

+0

@Asad - 정확하지만 불행히도 그 질문에는 확실한 답이 없습니다. – toplel32

+0

캐스트 (및 따라서 캐스팅 연산 코드)가 필요 없다는 대답이 나와 있습니다. –

답변

0

CIL을 작성할 때 OOP 언어가 아닌 가상 스택 기본 언어로 작성합니다.

Castclass는 CIL에서 모든 것이 쉽게 엉망이 될 수 있기 때문에 참조 주소가 원하는 클래스인지 확인하기 위해 사용할 선택적 opcode입니다.

이것은 변형 A를 CA 유형에서 CB 유형으로, 재고 인스턴스 CB를 B에서 A (모두 사용자가 http://pastebin.com/U1fuH5vC에서 수행)로 변경하는 예입니다.

.method public static void Swap(class TestOOP.Module1/CA& A, 
           class TestOOP.Module1/CB& B) cil managed 
{ 
    .maxstack 2 

    ldarg.0 
    ldarg.1 
    ldind.ref 
    stind.ref 

    ret 
}