[解決済み] C#のオーバーロードに相当するtypedef
2022-01-31 02:51:51
質問
私は、異なる意味を持つ多くの整数を持つコードの束を持っています(私はむしろ一般的なソリューションを望んでいますが、特定の例については:月の日 vs. 年の月 vs. 年など)。これらの意味に基づいてクラスのコンストラクタをオーバーロードできるようにしたいのです。
例えば
int a; // takes role A
int b; // takes role B
var A = new Foo(a); // should call one constructor
var B = new Foo(b); // should call another constructor
明らかにうまくいきませんが、もし(単なるエイリアスではなく)型として
int
のように、名前以外はすべて
typedef int TypeA; // stealing the C syntax
typedef int TypeB;
必要なオーバーロードを行い、どのようなものが何であるかを型システムに追跡させることができました。 例えば、ある関数から年として返された値が、月の日として使われることがないように。
を使用しない方法はありますか?
class
または
struct
のラッパーを使えば、C#でこれを行うことができますか?
フロートやダブリンの解決策もあればいいのですが。
どのように解決するのですか?
直接のtypedefに相当するものはありませんが、以下のようにすることができます。
using TypeA = int;
using TypeB = int;
しかし、これは新しい強い型を作るのではなく、その型を別名にするだけです。そのため、コンパイラはこれらをまだ
int
メソッド呼び出しを解決する際に
より良い解決策は、以下のようなシンプルなラッパークラスを作成することでしょう。
int
のように、暗黙のキャスティングを提供する。
struct TypeA
{
public TypeA(int value)
{
this.realValue = value;
}
private int realValue;
public static implicit operator int(TypeA value)
{
return this.realValue;
}
public static implicit operator TypeA(int value)
{
return new TypeA(value);
}
}
しかし、ほとんどの場面で
enum
の方がより適切でしょう。
関連
-
[解決済み】C#におけるtypedefの等価性
-
[解決済み】画像のペイントにTextureBrushを使用する方法
-
[解決済み】ファイルやアセンブリ、またはその依存関係の1つをロードできませんでした。
-
[解決済み] 型付けされた関数ポインタ?
-
[解決済み] C#の正しいバージョン番号を教えてください。
-
[解決済み] Pythonで型をチェックする標準的な方法は何ですか?
-
[解決済み] Objective-Cのtypedef enumとは何ですか?
-
[解決済み] C++11の'typedef'と'using'の違いは何ですか?
-
[解決済み] C++の'struct'と'typedef struct'の違い?
-
[解決済み】C++テンプレートのtypedef
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】プログラム実行中に1秒待つ
-
[解決済み】Excel "外部テーブルが期待された形式ではありません。"
-
[解決済み】クロススレッド操作が有効でない。作成されたスレッド以外のスレッドからアクセスされたコントロール
-
[解決済み】C# - パスに不正な文字がある場合
-
[解決済み】WSACancelBlockingCallの例外について
-
[解決済み】Linq 構文 - 複数列の選択
-
[解決済み】エラー「必要なフォーマルパラメータに対応する引数が与えられていない」を解決する?
-
[解決済み】Unityでゲームオブジェクトのすべての子をループスルーして破壊する方法?
-
[解決済み】名前 'ViewBag' が現在のコンテキストに存在しない - Visual Studio 2015
-
[解決済み】Nullableオブジェクトは値を持たなければならない?