과부하 연산자, 특히 암시 적 및 명시 적 변환과 관련된 광범위한 작업을 한 적이 없습니다.숫자 형식 및 예기치 않은 결과가있는 명시 적 및 암시 적 연산자
그러나 자주 사용되는 여러 개의 숫자 매개 변수가 있으므로 구조체를 숫자 형식 주위에 래퍼로 만들어 이러한 매개 변수를 강력하게 입력합니다.
public struct Parameter
{
private Byte _value;
public Byte Value { get { return _value; } }
public Parameter(Byte value)
{
_value = value;
}
// other methods (GetHashCode, Equals, ToString, etc)
public static implicit operator Byte(Parameter value)
{
return value._value;
}
public static implicit operator Parameter(Byte value)
{
return new Parameter(value);
}
public static explicit operator Int16(Parameter value)
{
return value._value;
}
public static explicit operator Parameter(Int16 value)
{
return new Parameter((Byte)value);
}
}
내가 명시 적 및 암시 사업자의 묘리를 터득하기 위해 내 테스트 구현과 실험되면서, 나는 명시 적으로 내 Parameter
유형과는 포기하지 않았다 내 놀라지에 Int64
캐스팅하려고 예를 들면 다음과 같습니다 구현입니다 예외 및 더 놀라운 것은 숫자를 잘라 버렸습니다. 나는 사용자 지정 명시 적 연산자를 제외하고 시도했지만 여전히 동일하게 동작합니다.
public void TestCast()
{
try
{
var i = 12000000146;
var p = (Parameter)i;
var d = (Double)p;
Console.WriteLine(i); //Writes 12000000146
Console.WriteLine(p); //Writes 146
Console.WriteLine(d); //Writes 146
}
catch (Exception ex)
{
Console.WriteLine(ex.Message); //Code not reached
}
}
그래서 난 내 구조체 대신에 일반 Byte
내 실험을 반복하고 같은 정확한 동작을 가지고, 그래서 분명히이 예상되는 동작,하지만 난 던질 것 데이터를 잃게 결과 명시 적 캐스트를 생각 예외.
아니, 명시 적 캐스트 정보를 잃을 수 있습니다. 묵시적인 캐스트는해서는 안됩니다. –
'AnyCPU','x32' 또는'x64'로 컴파일 중입니까? – ja72
@ ja72 응답 지연으로 미안하지만, x86으로 컴파일 중입니다. – psubsee2003