c# - 不使用点运算符访问类属性

标签 c# oop operator-overloading

使用 Double 类型调用时,我需要重载一些运算符。为了实现这一点,我创建了一个类 MyDouble,它继承自 Double。 MyDouble 看起来有点像这样

class MyDouble : Double
{
   Double value;
   // operator overloads go here
}

我想从用户那里抽象出 value 属性,以便它可以像 Double 一样使用。基本上我希望用户能够做到这一点:

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

关于c# - 不使用点运算符访问类属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9494070/

相关文章:

c# - 使用 ElasticSearch Nest 索引动态对象 - StackOverflow Exception

Java最佳实践或是否有任何设计模式来保存与该类没有直接关系的数据

java - 多态性和 n 层应用程序

c++ - 如何选择带有类型参数的成员变量?

c++ - 运算符重载 [][] 二维数组 C++

c# - SpreadsheetDocument OpenXML 解码 excel 文件中的编码文本

c# - mvc3 中 Viewbag 的范围是什么,我们如何在 MVC 中维护状态

c++ - 派生类的重载解析失败

kotlin - 如何(强制)在 Kotlin 中重载整数的加号?

c# - 重置 SendKeys 消息