C# 入門 & 実践 / C sharp
4-9. [ ジェネリック/コレクション ] 3. 制約
T の部分を制約する。
where T : class
と書くと T はclassのみ可
where T : IEnumerable<string>
と書くと IEnumerable<string> を実装したクラスのみ可
となります。
class MyClass
{
}
public class BbGenericLimited<T> where T : class
{
}
public class BbGenericLimitedX<T> where T : IEnumerable<string>
{
}
public class BbGeneric : IEnumerable<string>
{
private string[] strings;
public BbGeneric(string[] args)
{
strings = new string[args.Length];
for( int i=0; i<args.Length; i++)
{
strings[i] = args[i];
}
}
#region IEnumerable<string> メンバ
// 列挙可能なクラスは・・・列挙子を返すことが出来る・・・
public IEnumerator<string> GetEnumerator()
{
foreach (string s in strings)
{
yield return s;
}
}
#endregion
#region IEnumerable メンバ
IEnumerator IEnumerable.GetEnumerator()
{
throw new Exception("The method or operation is not implemented.");
}
#endregion
}
class Tester
{
static void Main()
{
// intは値型で クラス(参照型)ではないのでX
// BbGenericLimited<int> bb = new BbGenericLimited<int>();
BbGenericLimited<MyClass> bb2 = new BbGenericLimited<MyClass>();
// MyClass は インターフェイスを実装していないのでX
// BbGenericLimitedX<MyClass> bb3 = new BbGenericLimitedX<MyClass>();
BbGenericLimitedX<BbGeneric> bb4 = new BbGenericLimitedX<BbGeneric>();
}
}
4-8. [ ジェネリック/コレクション ] 2. インターフェイスの実装 / IEnumerable で foreach を実装 «
4. C# 入門 Level 2 »
4-10. [ ジェネリック/コレクション ] 4. List<T> の使用
C# 入門 & 実践 / C sharp