質問が正しいことを願っていますので、例を挙げましょう。次の一般的なメソッドを想像してください。
public abstract class Base : IDisposable
{
public static IEnumerable<T> GetList<T>()
where T : Base
{
// To ensure T inherits from Base.
if (typeof(T) is Base)
throw new NotSupportedException();
// ...
}
}
MSDNによると、キーワードは、型パラメーターが型である、またはこのクラスから継承されるようにwhere
制限します。T
Base
[...] where 句には、型がそのジェネリック型の型引数として使用されるために、指定されたクラスを基本クラスとして持つ (またはそのクラス自体である) 必要があることを示す基本クラス制約を含めることができます。
また、このコードはコンパイルされます:
public static T GetFirst()
where T : Base
{
// Call GetList explicitly using Base as type parameter.
return (T)GetList<Base>().First();
}
では、最後のコードをたどるとtypeof(T)
が返さBase
れるはずですよね? Visual Studio がこの警告を出力するのはなぜですか?
警告 CS0184: 指定された式は、指定された ('Demo.Base') 型ではありません。