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