>  기사  >  백엔드 개발  >  C# 사용자 지정 암시적 및 명시적 변환

C# 사용자 지정 암시적 및 명시적 변환

黄舟
黄舟원래의
2017-02-16 11:27:231651검색

명시적 및 암시적 변환 연산자를 사용하면 사용자 정의된 유형이 상호 교환을 지원할 수 있습니다. = (B)A)
암시적이란 B에서와 같은 암시적 변환을 의미합니다. -> A는 직접 할당하면 됩니다. (A = B)

암시적 변환은 가능합니다. 코드를 더욱 아름답고 간결하며 이해하기 쉽게 만들려면 암시적 연산자를 더 많이 사용하는 것이 가장 좋습니다. 하지만! 변환 시 개체 자체가 일부 정보(정밀도 등)를 잃게 되는 경우

을 호출할 때 컴파일 타임에 고객에게 경고할 수 있도록 명시적 연산자만 사용할 수 있습니다.

namespace OperatorTest
{
    /// <summary>
    /// 猪
    /// </summary>
    public class Pig
    {
        public Pig(string name)
        {
            this.Name = name;
        }
        public string Name;

        //explicit 关键字用于声明必须使用强制转换来调用的用户定义的类型转换运算符。
        //static explicit operator target_type { source_type identifier }
        //target_type 目标类型
        //source_type 源类型
        //identifier Something
        /*转换运算符将源类型转换为目标类型。源类型提供转换运算符。与隐式转换不同,必须通过强制转换的方式来调用显式转换运算符。如果转换操作可能导致异常或丢失信息,则应将其标记为 explicit。这可以防止编译器无提示地调用可能产生无法预见后果的转换操作*/
        public static implicit operator Pig(Monkey value)
        {
            Pig mk = new Pig(value.Name + ":猴子变猪!!");
            return mk;
        }
    }
rrree

통화:


namespace OperatorTest
{
    /// <summary>
    /// 猴子
    /// </summary>
    public class Monkey
    {
        public Monkey(string name)
        {
            this.Name = name;
        }
        public string Name;

        //implicit 关键字用于声明隐式的用户定义类型转换运算符。
        //static implicit operator target_type { source_type identifier }
        public static explicit operator Monkey(Pig value)
        {
            Monkey mk = new Monkey(value.Name + ":猪变猴子!!");
            return mk;
        }
    }

출력:



응용 프로그램:
예를 들어 실제 작업에서 객체 A(또는 엔터티)를 xml로 직렬화하여 저장한다면, 요구 사항을 충족하는 XML 콘텐츠를 개체나 엔터티로 변환하기 위해 클래스 A에 명시적 연산자가 정의되어 있습니다.
물론 객체 A의 클래스에 함수를 정의하여 이 처리를 구현할 수도 있지만 이를 위해서는 추가 단계가 필요할 수 있습니다. 즉, 함수가 정적 함수가 아닌 경우 객체를 먼저 인스턴스화해야 합니다. 해당 처리 기능을 호출합니다.


참고:

노골적인 키워드

암시 키워드

연산자 키워드


데모 다운로드

위는 C# 사용자 지정 암시적 및 명시적 변환 내용입니다. 더 많은 관련 내용을 보려면 PHP에 주의하세요. 중국넷(www.php.cn)!




성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
이전 기사:C# 다형성다음 기사:C# 다형성