내보내기(0) 인쇄
모두 확장
이 문서는 수동으로 번역한 것입니다. 원본 텍스트를 보려면 포인터를 문서의 문장 위로 올리십시오.
번역
원본

방법: 구조체 간의 사용자 정의 변환 구현(C# 프로그래밍 가이드)

다음은 RomanNumeralBinaryNumeral의 두 구조체를 정의하고 이 두 구조체 간의 변환을 보여 주는 예제입니다.


struct RomanNumeral
{
    private int value;

    public RomanNumeral(int value)  //constructor
    {
        this.value = value;
    }

    static public implicit operator RomanNumeral(int value)
    {
        return new RomanNumeral(value);
    }

    static public implicit operator RomanNumeral(BinaryNumeral binary)
    {
        return new RomanNumeral((int)binary);
    }

    static public explicit operator int(RomanNumeral roman)
    {
        return roman.value;
    }

    static public implicit operator string(RomanNumeral roman)
    {
        return ("Conversion to string is not implemented");
    }
}

struct BinaryNumeral
{
    private int value;

    public BinaryNumeral(int value)  //constructor
    {
        this.value = value;
    }

    static public implicit operator BinaryNumeral(int value)
    {
        return new BinaryNumeral(value);
    }

    static public explicit operator int(BinaryNumeral binary)
    {
        return (binary.value);
    }

    static public implicit operator string(BinaryNumeral binary)
    {
        return ("Conversion to string is not implemented");
    }
}

class TestConversions
{
    static void Main()
    {
        RomanNumeral roman;
        BinaryNumeral binary;

        roman = 10;

        // Perform a conversion from a RomanNumeral to a BinaryNumeral:
        binary = (BinaryNumeral)(int)roman;

        // Perform a conversion from a BinaryNumeral to a RomanNumeral:
        // No cast is required:
        roman = binary;

        System.Console.WriteLine((int)binary);
        System.Console.WriteLine(binary);

        // Keep the console window open in debug mode.
        System.Console.WriteLine("Press any key to exit.");
        System.Console.ReadKey();
    }
}
/* Output:
    10
    Conversion not yet implemented
*/


  • 앞의 예제에 있는 다음 문을 살펴 봅니다.

    
    binary = (BinaryNumeral)(int)roman;
    
    
    

    이 문에서는 RomanNumeralBinaryNumeral로 변환합니다. RomanNumeral에서 BinaryNumeral로 직접 변환되지 않으므로 캐스트를 사용하여 RomanNumeral에서 int로 변환하고 또 다른 캐스트를 사용하여 int에서 BinaryNumeral로 변환합니다.

  • 또한 다음 문을 살펴 봅니다.

    
    roman = binary;
    
    
    

    이 문에서는 BinaryNumeralRomanNumeral로 변환합니다. RomanNumeralBinaryNumeral로부터의 암시적 변환을 정의하므로 캐스트가 필요하지 않습니다.

커뮤니티 추가 항목

추가
Microsoft는 MSDN 웹 사이트에 대한 귀하의 의견을 이해하기 위해 온라인 설문 조사를 진행하고 있습니다. 참여하도록 선택하시면 MSDN 웹 사이트에서 나가실 때 온라인 설문 조사가 표시됩니다.

참여하시겠습니까?
표시:
© 2014 Microsoft