0

我可以创建一个具有默认返回值的类吗?可以说,如果我创建此类的对象,我总是会得到一个特定的值,而无需调用属性或其他东西。例子:

int i = new MyIntClass(/*something*/); //will return an int

实际上我想使用默认函数来返回一些东西。也许是这样的:

class MyCalculator()
{
  public double a { get; set; }
  public double b { get; set; }

  MyCalculator(double a, double b)
  {
    this.a = a;
    this.b = b;
  }

  public double DoMath()
  {
    return a*b;
  }
}

/* somewhere else */
double result = new MyCalculator(5.5, 8.7);

result应该是 的结果DoMath()。那可能吗?我知道这可能不是最好的例子,但这样的事情会很好。有任何想法吗?

4

2 回答 2

5

您可以进行隐式转换。

示例(添加到类):

public static implicit operator double(MyCalculator c)
{
  return c.DoMath();
}
于 2012-08-12T18:06:15.543 回答
4

如果我跟着你,你想要一个MyCalculator有一个double它可以被视为。您可以使用隐式强制转换运算符重载来做到这一点。把它放在 的定义中MyCalculator

public static implicit operator double(MyCalculator m)
{
  return m.DoMath();
}

然而,它在某种程度上隐藏了正在发生的事情(你打电话new并得到了 a double),如果你是一个重度用户,var你会发现它很烦人,因为你必须明确。

总之,只有implicit在你有很强的理由时才使用它。确实,只有explicit在你有非常强烈的理由时才使用,并且只有implicit在你有非常强烈的理由时才使用。

对于与类的接口有关的任何事情,一个好的指导原则是“对于从未看过源代码的人来说,这看起来有多明智或怪异?”

于 2012-08-12T18:09:43.043 回答