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

私があなたをフォローしているなら、あなたMyCalculatordoubleそれがとして扱われることができるようにしたいのです。これは、暗黙のキャスト演算子のオーバーロードを使用して行うことができます。これを次の定義に入れてくださいMyCalculator

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

しかし、それは何が起こっているのかをいくらか隠します(あなたが電話newして)を取得しました、doubleそしてあなたがあなたのヘビーユーザーであるvarならあなたはそれからあなたが明示しなければならないのでそれを迷惑に感じるでしょう。

全体として、非常に強い正当性implicitがある場合にのみ使用してください。確かに、あなたがそれに対して非常に強い正当化を持っている場合にのみ使用しあなたが非常に強い正当化を持っている場合にのみ使用してください。explicitimplicit

クラスのインターフェースに関係する何かのための良いガイドラインは、「これは、ソースコードを見たことがない人にとって、どれほど賢明で奇妙に見えるでしょうか?」です。

于 2012-08-12T18:09:43.043 に答える