저는 분수, 십진수 및 수학 상수 (즉, 파이, 오일러 번호)와 같은 여러 유형의 수학적 값으로 작업 할 프로젝트를 진행 중입니다.하나의 일반적인 방법이나 여러 가지 오버로드 된 방법이 더 적절합니까?
나는이 코드를 사용하여 각각의 유형이 상속하는 추상 기본 클래스를 만들었습니다. 나는 파생 클래스의 각 오버로드 방법과 그 방법을 교체해야하는 경우
public abstract class MathValue
{
public abstract double Value { get; set; }
protected bool irrational;
public virtual bool IsIrrational
{
get { return this.irrational; }
}
public virtual T ToValueType<T>(bool ignoreConstraints) where T : MathValue;
public abstract MathValue Add<TParam>(TParam val) where TParam : MathValue;
public abstract MathValue Subtract<TParam>(TParam val) where TParam : MathValue;
public abstract MathValue Multiply<TParam>(TParam val) where TParam : MathValue;
public abstract MathValue Divide<TParam>(TParam val) where TParam : MathValue;
}
그러나 나는 지금 여기에 일반적인 방법을 사용하는 것이 적절한 지 여부에 의문을 제기하거나하고있다.
이 경우 어느 쪽이 더 적절합니까?
는 동일한 기능을 수행 할 것이다 당신의 오버로드 위치 : 나는 모든 개체에 대한 출력 ToString하려면 어떤 객체가
ToString()
방법이 있기 때문에, 나는 그러나 나는 것입니다 내 예를 위해 ... 제네릭을 사용하지 않을 수도 물건을 추가하거나, 오일러 번호를 추가 할 때 PI를 추가하는 경우 다르게 번호를 추가합니까? 만약 당신이 신경 쓰지 않는다면, 그냥'MathValue'를 받아들입니다. 당신이 뭔가 다른 일을해야한다면 (이 경우에는 적용되지 않는 것 같습니다), 그러면 다른 오버로드가 생깁니다. – Servy귀하의 질문을 더 잘 이해할 수있을 것으로 생각합니다. 귀하가 생각한 샘플 구현이 도움이 될 것입니다. @Servy가 언급했듯이 구현 클래스와 동일한 유형의 MathValue 만 추가 할 수 있도록 구현 "추가"메서드가 필요합니까? – Tombala
그들은 다른 행동을합니다. 예를 들어 소수에 간단한 숫자 값을 추가 할 때 십진수로 변환하는 것이 아닌 부적절한 분수를 만들고 싶습니다. 목표는 MathValue 객체를 수학 표현식의 계수 및 지수로 사용하는 것입니다. –