1. ホーム
  2. c#

[解決済み】C#におけるtypedefの等価性

2022-01-21 09:24:49

質問

C#でtypedefに相当するもの、または似たような動作を得る方法はありますか?いくつかググってみましたが、どこも否定的なようです。現在、私は以下のような状況になっています。

class GenericClass<T> 
{
    public event EventHandler<EventData> MyEvent;
    public class EventData : EventArgs { /* snip */ }
    // ... snip
}

さて、このイベントのハンドラを実装しようとすると、すぐにたくさんのタイピングが必要になることは、ロケット科学者でなくてもわかるだろう(ひどい駄洒落で申し訳ない)。結局のところ、以下のような感じになります。

GenericClass<int> gcInt = new GenericClass<int>;
gcInt.MyEvent += new EventHandler<GenericClass<int>.EventData>(gcInt_MyEvent);
// ...

private void gcInt_MyEvent(object sender, GenericClass<int>.EventData e)
{
    throw new NotImplementedException();
}

ただし、私の場合、単なるint型ではなく、すでに複合型を使っていたのですが。もう少し簡略化できるといいのですが......。

Edit: つまり、EventHandlerを再定義する代わりに型付けすると、同じような動作になる可能性があります。

解決方法は?

typedefに相当するものはありません。一つのファイルの中で 'using' ディレクティブを使用することはできます。

using CustomerList = System.Collections.Generic.List<Customer>;

が、それはそのソースファイルにのみ影響します。CやC++では、私の経験では typedef は通常、広くインクルードされる .h ファイル内で使用されるため、1つの typedef はプロジェクト全体で使用することができます。C#では、このような機能はありません。 #include の機能を使用することができます。 using ディレクティブを別のファイルで使用することができます。

幸いなことに、あなたが挙げた例では が行います。 には、暗黙のメソッドグループ変換という修正があります。イベントサブスクリプションの行を単に変更することができます。

gcInt.MyEvent += gcInt_MyEvent;

:)