定义类的默认返回值/函数?

时间:2012-08-12 18:03:55

标签: c# .net

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

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()的结果。那可能吗?我知道它可能不是最好的例子,但这样的事情会很好。有什么想法吗?

2 个答案:

答案 0 :(得分:5)

你可以进行隐式演员表演。

示例(添加到类):

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

答案 1 :(得分:4)

如果我关注您,您希望MyCalculator拥有double,可以将其视为。您可以使用隐式转换运算符重载来执行此操作。将其放在MyCalculator

的定义中
public static implicit operator double(MyCalculator m)
{
  return m.DoMath();
}

然而,它有点隐藏了正在发生的事情(你叫new并得到double)如果你是var的重度用户,你会发现它很烦人,因为你必须要明确。

总之,如果您有非常强有力的理由,则只能使用implicit。实际上,如果您有非常强有力的理由,则只能使用explicit,如果您拥有非常强有力的理由,则只能使用implicit

与类“界面”有关的一个很好的指导方针是“对于从未看过源代码的人来说,这看起来多么明智或奇怪?”