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