5

私は方向(前方/後方)の概念が非常に重要なアプリケーションに取り組んでいます。

問題は、コードベース全体に広がるいくつかの異なる規則があることです。ある場所ではそれがtrue / falseであり、他の場所では+ 1/-1です。

これをまとめるために、私は次のものを作成しました。

public class DirectionClass
{ 
     public bool Forwards { get; set; }
     public double Sign { get; set; }
     public EDirection { get; set; }
     //plus associated constructor overloads, implementing IEquatable, etc.
}

私は今、暗黙の変換が良いアイデアなのか悪いアイデアなのか疑問に思っています。

public static implicit operator DirectionClass(double sign);
public static implicit operator DirectionClass(bool forwards); //etc..

そして、私が奨励する可能性が高い古典的な落とし穴があるかどうか。

4

2 に答える 2

6

基本的に、標準ライブラリを設計する場合、暗黙的な変換は常に悪い考えです。暗黙の変換が中断するケースを突然発見した場合、多くの人がそれに依存しているため、簡単に修正することはできません。

一方、コードベース全体(または少なくともチーム)を担当している場合。あなたの人生をよりシンプルにするものを探してください。

そして、それが壊れた1つのケースを発見した場合:

  • あなたは何かを学んだでしょう(それはいつも素晴らしいです)
  • 一歩下がってコードを修正できます
于 2009-11-23T11:29:47.563 に答える
4

一般に、この場合、暗黙の変換で問題ないはずです。

暗黙の変換を伴う古典的な落とし穴は、人々が変換中に一部の情報を失うような方法でそれを実装する場合です。これにより、想像できるように全体的な混乱が生じます(たとえば、等しくなければならないものはもはや等しくないなど)。しかし、これはあなたの例には当てはまりません。

注意しなければならない唯一のことは、ある意味で型チェックを失うことです。コンパイラはエラーでプロンプトを表示しません。

于 2009-11-23T11:25:31.747 に答える