【发布时间】:2017-09-13 07:01:08
【问题描述】:
我使用了一个框架,它公开了一个名为Value 的抽象类。通过运算符重载,几乎可以将任何东西分配给这个类的对象,它就像一个魅力:
Value a = "hello";
Value b = 1;
Value c = true;
Value d = 3.14;
(请注意,这是创建Value 实例的唯一方法。除了重载的运算符之外,没有公共/受保护的方法可以为实例赋值。)
现在,我想重写 implicit operator Value(string input) 函数,以便在分配之前对任何字符串进行 XML 过滤。
我已经尝试过继承这个类并覆盖操作符,但还没有找到一种方法将净化后的字符串提供给基类的操作符函数。以下显然不起作用:
public override static implicit operator XmlValue(string input)
{
string output = sanitize(input);
XmlValue rv = null;
((Value)rv) = output; // this is not possible
return rv;
}
有没有办法做到这一点?或者,我是否可能过度思考了这个问题,是否有更好的解决方案来解决我想做的事情?在任何情况下,我都希望避免在将每个字符串分配给Value 之前对其进行清理;这太容易出错了。
仅供参考:Value 类是 Cottle framework 的一部分。
【问题讨论】:
标签: c# operator-overloading overriding