在不使用点运算符的情况下访问类属性

问题描述:

我需要在使用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财产。这可能吗?我会怎么做呢?

+0

这是什么“双重”类从MyDouble继承?它不能是System.Double,因为这是一个值类型,并且值类型是隐式密封的。 – phoog 2012-02-29 06:52:24

+0

是的,我以为我可以从System.Double派生,但意识到这是不可能的。 – xbonez 2012-02-29 07:08:39

+0

不是很清楚你的目的,重写ToString函数? – fengyj 2012-02-29 06:02:20

您可以定义的隐式转换操作符,就像这样:

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); 
    } 
} 
+0

这看起来正是我所需要的。 Upvoting,并执行。我会回来接受。谢谢! – xbonez 2012-02-29 05:47:23

+0

这不正是我所期望的。如果我做'Mydouble a = 5.0',我期望MyDouble'a'的一个实例用'a.value = 5'创建,但是我得到'不能隐式地将double类型转换为MyDouble'。好像我没有超载正确的操作符。 – xbonez 2012-02-29 05:59:42

+0

@xbonez我编辑的答案包括其他转换。 – dasblinkenlight 2012-02-29 06:09:01