自定义日期类型以双重类型转换

时间:2014-02-07 11:06:47

标签: c# type-conversion implicit-conversion

如果我有一个名为MyDate的自定义日期类型,我在其中编写了运算符,用于将double和MyDate隐式转换为彼此。

我的问题:是否有任何方法可以为特定方法参数切换此隐式转换?这是一个好主意吗?

e.g。

public class A {
    ...

    public void AMethod(double x, double y) {

      // do something
    }
}

我不想在AMethod()的特定情况下让某人能够像这样调用它:

A a = new A();
a.AMethod(m, n);  // m and n are of type MyDate

2 个答案:

答案 0 :(得分:3)

我认为不可能只关闭所选方法的隐式转换,无论是全部还是全部都没有。

话虽如此,只有在进行转换时没有丢失任何内容时才应实现隐式转换,例如:你不应该关心转换是否发生。如果不是这种情况(或者至少在一个方向上不是这种情况),那么将隐式转换更改为显式,您的问题将消失。当然,对于所有这些转换,您的代码将更加明确,但这是正确的。

答案 1 :(得分:2)

这不是一个好主意。 在创建自定义隐式转换时,您应该以适用于所有可能方案的方式实现它。 在某些情况下关闭它的可能性会使代码更难以阅读并可能引入错误。

如果您想要打开和关闭转换,您应该只执行显式转换(然后可以在需要时应用)。