Edited at

C#のジェネリックの型引数の制限条件にインターフェースが使えない

More than 1 year has passed since last update.

ジェネリックの型引数の制約条件にインターフェースを使ったら、


Inconsistent accessibility: constraint type 'ISavable' is less accessible than 'ReactiveSavableList' [Assembly-CSharp]


とのエラー。

コードは下記の通り

// ISavable

interface ISavable
{
void Save();
}

// ReactiveSavableList
public class ReactiveSavableList<T> where T:ISavable
{
}

Interfaceはインスタンス化できない

→コンストラクタがprivate?

→ReactiveSavableListのpublicなコンストラクタとの間に、アクセシビリティのエラーが出ている?

と思ったので、下記の通りに修正したらエラー取れました。

以下、修正後のコード。

// ISavable

abstract public class ISavable
{
public void Save()
{
}
}

// ReactiveSavableList
public class ReactiveSavableList<T> where T:ISavable
{
}

命名はAbstract◯◯みたいに変えると良さそうです。

※追記(2018-01-11 21:06)

上のエラーが出ているコードでも、interfaceをpublicにすれば解決します。

YuneKichiさんありがとうございました!