第136回 ジェネリックについて

公開日:2015-04-26

1. 概要

独り言によるプログラミング講座、「第136回 ジェネリックについて」です。
ジェネリックと聞くと、ジェネリック医薬品を思い浮かべますが、あまり考えない方が良いです。
クラスで保持する変数の型や、メソッドの引数の型を、使用者側から指定できるようにしたのがジェネリックです。

2. 動画


3. 動画中に書いたソース

Form1.cs
using System;
using System.Collections;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            //★独り言によるプログラミング講座

            //■ジェネリックについて

            //  型の指定
            /*
            var list = new List<string>();
            list.Add("abc");
            list.Add("123");
            //list.Add(999); //エラー

            MessageBox.Show(list[0]);
            MessageBox.Show(list[1]);
            */

            /*
            ArrayList list = new ArrayList();
            list.Add("abc");
            list.Add("123");
            list.Add(999);

            MessageBox.Show(list[0].ToString());
            MessageBox.Show(list[1].ToString());
            MessageBox.Show(list[2].ToString());
            */

            /*
            //お醤油のビン
            ArrayList list = new ArrayList();
            list.Add("お醤油");
            list.Add("ソース");

            var list = new List<お醤油>();
            list.Add(お醤油);
            //list.Add(ソース); //エラー
            */

            /*
            DataInt data = new DataInt();
            data.value = 123;

            DataString data2 = new DataString();
            data2.value = "abc";
            */

            var dataInt = new Data<int>();
            dataInt.value = 1;

            var dataStr = new Data<string>();
            dataStr.value = "abc";

            MessageBox.Show(dataInt.value.ToString());
            MessageBox.Show(dataStr.value.ToString());

            this.Dispose();
        }
    }

    class Data<T> {
        public T value;
    }

    class DataInt {
        public int value = 0;
    }

    class DataString {
        public string value = "";
    }

    class DataFloat {
        public float value = 0;
    }
}