我有两个类,代表一种特殊的数字类型。让我们称之为“Value”和“Fraction”; Fraction由类型为Value的分子和分母组成。因为这些是数字值,所以运算符重载(+ - * /)非常有意义。由于Value的性质,除法返回一个Fraction。可以使用Values和Fractions的混合进行操作。
目前,我只定义了一个从Value到Fraction的隐式转换运算符(还有一个从Fraction到Value的显式转换运算符,但我没有使用它),并且没有使用任何继承方式。
我想知道是否有任何“优雅”的方法来在抽象基类中定义这两个类,并调用适当的操作。效率是一个问题。我宁愿只在必要时使用Fraction,也不想在需要时为两种情况分别定义更复杂的操作,而是希望使用相同的语法来表达。
我能看到的一种方法是对每个操作执行以下操作,但我想知道是否有更好的方法?
目前,我只定义了一个从Value到Fraction的隐式转换运算符(还有一个从Fraction到Value的显式转换运算符,但我没有使用它),并且没有使用任何继承方式。
我想知道是否有任何“优雅”的方法来在抽象基类中定义这两个类,并调用适当的操作。效率是一个问题。我宁愿只在必要时使用Fraction,也不想在需要时为两种情况分别定义更复杂的操作,而是希望使用相同的语法来表达。
我能看到的一种方法是对每个操作执行以下操作,但我想知道是否有更好的方法?
public static AbstractValue operator *(AbstractValue a, AbstractValue b)
{
Value valA = a as Value;
Value valB = b as Value;
if(valA == null)
{
Fraction fractA = a as Fraction;
if(valB == null)
{
Fraction fractB = b as Fraction;
return fractA * fractB;
}
return fractA * valB;
}
if(valB == null)
{
Fraction fractB = b as Fraction;
return valA * fractB;
}
return valA * valB;
}