在不使用点运算符的情况下访问类属性
我需要在使用Double类型调用时重载某些运算符。为了达到这个目的,我创建了一个继承自Double的MyDouble类。 MyDouble看起来有点像这样在不使用点运算符的情况下访问类属性
class MyDouble : Double
{
Double value;
// operator overloads go here
}
我想抽象远离用户value
属性,以便它是可用的只是作为一个双。基本上,我希望用户能够做到这一点:
MyDouble a = 5; //a.value gets assigned 5
Console.WriteLine(a); //prints a.value
我不希望用户有专门针对value
财产。这可能吗?我会怎么做呢?
您可以定义的隐式转换操作符,就像这样:
class MyDouble {
public Value {get; private set;}
public Double(double value) {
Value = value;
}
// Other declarations go here...
public static implicit operator double(MyDouble md) {
return md.Value;
}
public static implicit operator MyDouble(double d) {
return new MyDouble(d);
}
}
这看起来正是我所需要的。 Upvoting,并执行。我会回来接受。谢谢! – xbonez 2012-02-29 05:47:23
这不正是我所期望的。如果我做'Mydouble a = 5.0',我期望MyDouble'a'的一个实例用'a.value = 5'创建,但是我得到'不能隐式地将double类型转换为MyDouble'。好像我没有超载正确的操作符。 – xbonez 2012-02-29 05:59:42
@xbonez我编辑的答案包括其他转换。 – dasblinkenlight 2012-02-29 06:09:01
这是什么“双重”类从MyDouble继承?它不能是System.Double,因为这是一个值类型,并且值类型是隐式密封的。 – phoog 2012-02-29 06:52:24
是的,我以为我可以从System.Double派生,但意识到这是不可能的。 – xbonez 2012-02-29 07:08:39
不是很清楚你的目的,重写ToString函数? – fengyj 2012-02-29 06:02:20