문제

최근에 JSON 및 EXTJS 프레임 워크 작업을 시작했으며 예에서 다음 코드를 발견했습니다.

우리는 이것을 사용하여 프론트 엔드에서 정보를 검색합니다.

object updatedConfig = JavaScriptConvert.DeserializeObject(Request["dataForm"]);

그런 다음 예에서 다음을 수행합니다.

JavaScriptObject jsObj = updatedConfig as JavaScriptObject;

나는 이전과 같은 "As"키워드를 본 적이 없습니다. 이것은 다른 형태의 다른 형태로 업데이트 된 config 변수를 javaScriptObject로 명시 적으로 권장됩니까, 아니면 이것에 대해 이해하지 못하는 것이 있습니까?

감사

도움이 되었습니까?

해결책

이것은 안전한 캐스트로 알려져 있습니다. 무엇을 하는가는 한 유형에서 다른 유형으로 캐스트하려고 시도하고 캐스트가 실패하면 반환됩니다. null 던지는 대신 InvalidCastException.

실제로 차이를 처리하기위한 두 가지 별도의 IL 지침이 있습니다.as"캐스팅 및 정상적인 정적 캐스팅. 다음 C# 코드에는 두 유형의 캐스팅이 포함되어 있습니다.

using System;

class Program
{
    static void Main()
    {
        Object o = null;

        String s0 = (String)o;
        String s1 = o as String;
    }
}

첫 번째 캐스트는 castclass IL 명령과 두 번째 캐스트는 다음을 사용합니다 isinst 지침.

참조하십시오 CLR의 'AS'키워드 사용 대 캐스팅 대 더 자세한 설명을 위해.

다른 팁

그만큼 키워드로 C#에서 객체를 캐스팅하는 더 안전한 방법입니다.

SomeType a = obj as SomeType;

if를 의미합니다 obj 유형입니다 SomeType, obj 그 유형으로 캐스트됩니다. 만약에 obj 무효 또는 유형이 아닙니다 SomeType, a는 null이 될 것입니다.

AS 키워드의 또 다른 장점은 AS (Cast)가 런타임까지 끊어지지 않는 곳에 유형을 캐스트 할 수없는 경우 컴파일 타임 예외를 던지는 것입니다.

또한, "로서"는 객체 자체가 아닌 참조에서 작동한다는 것을 기억하는 것이 중요합니다. 그렇기 때문에 물체가 손상되지 않기 때문에 예외를 던지는 대신 Null을 반환 할 수 있습니다. 그렇기 때문에 참조 유형에서만 할 수 있습니다.

일반적으로 그다지 중요하지는 않지만 캐스팅 기능을 구현하는 경우 (여기서와 같이 MSDN) 그럴 것입니다 ~ 아니다 연산자로 사용하여 호출해야합니다.

따라서, As Operator는 "상속 력을 위아래로 이동하는 데 유용합니다." OJBECT O = P로서 개체; 사람으로서 p = o; 그러나 모든 경우에 메모리의 객체는 어떤 식 으로든 수정되지 않으며 그에 대한 참조만으로 수정되지 않습니다.

도움이되기를 바랍니다

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top