8

これは少しアンチパターンかもしれませんが、C# クラスのプロパティが複数の値を受け入れることは可能ですか?

たとえば、Public int プロパティがあり、常に int を返したいとしますが、10 進数、整数、またはその他のデータ型を割り当てることによってプロパティを設定できるようにしたいとします。私の質問は、プロパティが複数の値を受け入れることができるかどうかです。

4

5 に答える 5

10

あなたが尋ねる意味は次のとおりだと思います:暗黙的および明示的なキャストはandに対してどのように機能しますか?intdecimal

あるオブジェクトを別の定義された型に自動的に変換する暗黙のキャストについて質問しています。intandに対してこれを行うことはできません。これは、フレームワークで既に定義されており、にキャストしてdecimalのスコープを縮小できないためです。ただし、作成した実際のオブジェクトの例としてそれを使用している場合は、上記の暗黙のリンクを使用して、これがどのように機能し、どのように実装するかについて詳しく知ることができます。decimalint

ただし、いつでも convert メソッドを使用して正しい型に変換できます。

public int MyProperty { get; set; }
...
obj.MyProperty = Convert.ToInt32(32.0M);
obj.MyProperty = Convert.ToInt32(40.222D);
obj.MyProperty = Convert.ToInt32("42");
于 2009-04-14T01:55:30.850 に答える
2

編集: op は特にプロパティにバインドされているため、このメソッドは使用できません。

あなたが説明する堅牢性では、これが可能だとは思いません。この場合、オーバーロードされたメソッド(ポリモーフィズム)を使用する方がよいでしょう。

これは通常、セッター(またはミューテーター) として知られているものであり、メソッドをオーバーロードして、複数の異なるタイプのパラメーターを受け入れることができます。必要に応じて、それぞれが異なるパフォーマンスを発揮します。私がそれらを設定した方法は構文的に正しくないかもしれませんが、それはあなたが探している一般的な考え方だと思います.

public class MyClass {
  private Int32 mySomeValue;
  public void setSomeValue(Double value) { this.mySomeValue = Convert.ToInt32(value); }
  public void setSomeValue(Int32 value) { this.mySomeValue = value; }
}
于 2009-04-14T01:58:59.080 に答える
1

いいえ。プロパティには単一の値があります。同じ型の変数に割り当てることができるものは何でも割り当てることができます。

于 2009-04-14T01:54:15.517 に答える
1

実行時に型を確認する必要があるようです。プロパティにオブジェクトを受け入れさせ、タイプを決定し、アクションを実行させることができます。もちろん、予期しないものに対しては例外をスローする必要があります。あなたが言うように、おそらく最高ではありませんが、可能です。:)

于 2009-04-14T01:55:02.473 に答える
-1

プロパティは、パブリック フィールドのように見えるはずです。セッター メソッドを作成するか、プロパティ セッターではなく代入ステートメントでキャスト/変換を行います。

于 2009-04-14T01:54:14.677 に答える