답변:
이것은 변환 연산자 입니다. 이 코드를 작성할 수 있음을 의미합니다.
XmlBase myBase = new XmlBase();
XElement myElement = myBase;
그리고 컴파일러는 불평하지 않을 것입니다! 런타임에 변환 연산자가 실행 myBase
되어 인수로 전달 되고 유효한 XElement
결과를 반환합니다 .
개발자가 컴파일러에게 알려주는 방법입니다.
"이것들은 완전히 관련이없는 두 가지 유형처럼 보이지만 실제로는 다른 형식으로 변환하는 방법이 있습니다.이를 수행하는 방법에 대한 논리를 다루겠습니다."
당신은 변환 할 수 있습니다 암시 운영자 수단 등 XmlBase
을 XElement
암시.
XmlBase xmlBase = WhatEverGetTheXmlBase();
XElement xelement = xmlBase;
//no explicit convert here like: XElement xelement = (XElement)xmlBase;
XElement xelement = (XElement)xmlBase;
질문에서 그것은 static
정적이어야합니까? 비정적일 수 없어 인스턴스화 할 수 있습니까?
또 다른 흥미로운 사용법은 (Unity가 객체 (따라서 MonoBehavior의 인스턴스)가 null인지 확인한 것입니다)입니다.
public static implicit operator bool (CustomClass c)
{
return c != null;
}
코드는 클래스 안에 있어야합니다 (이 경우 CustomClass). 그렇게하면 다음과 같이 할 수 있습니다 :
void Method ()
{
CustomClass c1 = null;
CustomClass c2 = new CustomClass ();
bool b1 = c1; // is false
bool b2 = c2; // is true
if (!c1 && c2)
{
// Do stuff
}
}
분명히 가장 악명 높은 용도는 클래스 중 하나를 다른 클래스로 변환하는 데 사용하는 것일 수 있습니다. 그러나 기본 유형과 함께 사용하는 것도 고려할 가치가 있습니다.
static implicit operator bool
방법을 선언해야합니다 내부CustomClass
. 데모 목적 으로 DotNetFiddle 을 만들었습니다 .