1 回答
TA贡献1834条经验 获得超8个赞
我认为你应该使用类似 fluent 的东西来获得灵活性,而不是重载原始类型及其运算符,只是为了将它们注入到它不属于的地方:
public interface INumeric
{
INumeric Add(INumeric num);
INumeric Sub(INumeric num);
INumeric Mul(INumeric num);
INumeric Div(INumeric num);
}
因此,例如,如果您想复制原始类型的行为,您将在里面得到类似的东西:
public INumeric Sub(INumeric b)
{
var a = this;
return new Numeric(a.Value-b.Value);//obviuously, no notify here
}
如果您想以流畅的方式使用实例并通知观察者:
public INumeric Sub(INumeric b)
{
var a = this;
a.Value = a.Value - b.Value;//notify 'a' observers or whatever here.
return a;
}
在代码它看起来像这一点,并在分配不会断裂,但小动作的提防与引用(工作时下面可以迷惑你OMG这将是不可能的调试):
var a = new Numeric(10);
var b = new Numeric(2);
a = a.Sub(b)//10 - 2 = 8
.Add(a)//8 + 8 = 16
.Add(b);//16 + 2 = 18
并以原始形式:
a = a - b + a + b; //10 - 2 + 10 + 2 = 20
PS:
如您所见,重载原始类型是个坏主意。它们在性质上与参考文献完全不同,参考文献很容易打乱你的整个逻辑。
- 1 回答
- 0 关注
- 191 浏览
添加回答
举报