나는 이런 구조체를 가지고있다. Money
를 들어C#을 사용하면 한 번에 모든 연산자를 어떻게 오버로드 할 수 있습니까?
public struct Money
{
private readonly decimal _quantity;
private Money(decimal qty)
{
_quantity = Math.Round(qty, 2);
}
public static implicit operator Money(decimal dec)
{
return new Money(dec);
}
}
, 나는 모든 사업자 +를 오버로드해야합니까 - <, < =,>,> =, ==, = 등!? 아니면 Money
에 대해서도 decimal
의 모든 연산자를 수락 할 수있는 방법이 있습니까? 보시다시피 Money
에는 _quantity
이라는 필드가 하나만 있습니다. 나는 모든 사업자가 Money
에 대해 요청한 경우 _quantity를 요청하는 것처럼 되돌려 주길 원합니다.
암시 적 변환 연산자보다 과부하가 문제를 해결할 수도 있습니다. 내 전체 프로젝트에 decimal
를 사용하지 않기 때문에
public static implicit operator decimal(Money money)
{
return money._quantity;
}
나는, Money
구조체를 만드는 오전. 컴파일러는 decimal
대신 Money
을 사용해야합니다. 위의 변환 연산자를 암시 적으로 사용하면이 구조체를 만드는 이유와 모순됩니다. 당신은에있는
답장을 보내 주셔서 감사합니다. Dmitry. 하지만 연산자 오버로드 메서드는 이미'return left._quantity right._quantity' 구조를 가지고 있습니다. C#에서 제네릭 형식뿐만 아니라 제네릭 연산자도 지원했다면 제 질문에 답이있을 것입니다. –
serdar
@serdar : 예, "<=>"연산자 (모든 비교를 결합 할 수 있음)와 숫자 유형 (산술을 구현하는 경우)이 때때로 성가시다. –