6
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

C# 7.3からGeneric制約にEnumが使えるようなって便利

Last updated at Posted at 2019-02-01

C# 7.3の新機能としてジェネリック制約が拡張され、System.Enum型またはSystem.Delegate型を指定できるようになりました。
C# 7.3 の新機能|Microsoft Docs

これが結構便利で、例えば何らかの処理タスクを定義するクラスの共通インターフェイスとしてこんな感じにEnumを指定できるようになりました。

// 様々な処理タスクのインターフェイス
public interface enum ITask<TState> where TState : Enum
{
    TState State {get;set;}
}

// 
public class EncodeTask : ITask<EncodeState>
{

}

// 処理の状態を定義するEnum
public enum EncodeState
{
    Queued = 0,
    Downloading = 1,
    Encoding = 2,
    Uploading = 3,
    // 必要な処理を書いていく
}

ただ、どんなEnumeでも指定できるので、正直言うと中途半端な感も否めないです。Enumも継承できると便利なのですが・・・

ちなみにVisual Studio 2017だとデフォルトの言語バージョンが「C#の最新のメジャーバージョン(既定)」になっていると思うので、設定変更が必要になります。
C# 言語のバージョンの選択|Microsoft Doc

6
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?