C#19泛型

文章目录

泛型概述

C#19泛型
C#19泛型

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace _19._1泛型概述
{
    class Program
    {
        static void Main(string[] args)
        {
            //集合与数组:①长度可以改变②添加数据时不用考虑具体类型,object
            List<int> list = new List<int>();
            list.Add(2);
            list.Add(4);
            list.AddRange(new int[] { 1, 2, 3, 4, 5, 6 });
            list.AddRange(list);//泛型可以添加自己
            list.Insert(3, 100);//在索引为3处插入100
            //list.Sort();//从小到大排序
            //list.Reverse();//倒叙

            for(int i=0;i<list.Count;i++)
            {
                Console.WriteLine(list[i]);
            }

            int[] nums = list.ToArray();//将泛型转换成数组
            List<int> listTwo = nums.ToList();//nums可以转换成list

            
            Console.ReadKey();
        }
    }
}

结果:

2
4
1
100
2
3
4
5
6

泛型集合类使用场合概述

C#19泛型

C#19泛型

自定义泛型类的创建

C#19泛型
C#19泛型
C#19泛型

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace _19._3自定义泛型类的创建
{
    public class TGeneric<T>//创建泛型类
    {
        public T Field;
    }

    class commonlyClass//普通类
    {
        public T G<T>(T t)//普通方法
        {
            return t;
        }
    }


    class TGenericTwo<T>//泛型类
    {
        public  T M(T t)//此方法有自己的类型参数列表,为泛型方法
        {
            return t;
        }
    }
    class Program
    {
        static void Main(string[] args)
        {
            TGeneric<string> g = new TGeneric<string>();
            g.Field = "51zxw.net";
            Console.WriteLine(g.Field);
            Console.ReadKey();
        }
    }
}

类型参数

C#19泛型

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace _19._4类型参数_T
{
    public class TGenericDemo<T>
    {
        void Exp(T input)
        {

        }
    }



    class Program
    {
        private class customClass//自定义类型,其余普通的int char类是一样的
        {

        }
        static void Main(string[] args)
        {
            //实例化泛型类,gd1为char类型
            
            TGenericDemo<char> gd1 = new TGenericDemo<char>();
            Console.WriteLine("实例化类型为char的TGenercDemo的gd1成功");

            TGenericDemo<int> gd2 = new TGenericDemo<int>();
            Console.WriteLine("实例化类型为int的TGenercDemo的gd2成功");

            TGenericDemo<string> gd3 = new TGenericDemo<string>();
            Console.WriteLine("实例化类型为string的TGenercDemo的gd3成功");

            TGenericDemo<customClass> gd4 = new TGenericDemo<customClass>();
            Console.WriteLine("实例化类型为自定义类型的TGenercDemo的gd4成功");
            Console.ReadKey();

        }
    }
}

结果:

实例化类型为char的TGenercDemo的gd1成功
实例化类型为int的TGenercDemo的gd2成功
实例化类型为string的TGenercDemo的gd3成功
实例化类型为自定义类型的TGenercDemo的gd4成功

泛型继承之开放与封闭

C#19泛型
C#19泛型
C#19泛型
C#19泛型

泛型继承之泛型类继普通类

C#19泛型

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace _19._6泛型继承之泛型类继承普通类
{
    public abstract class  baseClass//普通基类的创建
    {
        protected int user_name;//定义字段
        public virtual int user_Name//定义属性
        {
            get { return user_name; }
            set { user_name = value; }
        }
        public baseClass(int index)//构造函数
        {
            user_name = index;
        }

        public abstract void method(int t);//方法
    }


    public class TGenClass<T>:baseClass//泛型派生类
    {
        protected new T user_name;//隐藏基类的同名成员
        public new T user_Name
        {
            get { return user_name; }
        }
        public TGenClass(int index) : base(index)//构造函数
        { }
        public TGenClass(T t):base(1000)
        {
            user_name = t;
        }
        public override void method(int t)//重载方法
        {
            Console.WriteLine("调用方法成功");

        }
        public void method(T t)//方法
        { }


    }


    class Program
    {
        static void Main(string[] args)
        {
            int val = 1000;
            TGenClass<int> g = new TGenClass<int>(val);
            g.method(g.user_Name);
            Console.WriteLine("泛型继承演示成功:泛型类继承普通类");
            
            Console.ReadKey();
        }
    }
}

结果:

泛型继承演示成功:泛型类继承普通类

泛型继承之普通类继承泛型类

C#19泛型

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace _19._7泛型继承之普通类继承泛型类
{

    abstract class TgenClass<T>//泛型基类
    {
        protected T field;//字段
        public virtual T Filed
        {
            get { return field; }
        }
        public TgenClass(int index)//构造函数
        {

        }
        public TgenClass(T t) { field = t; }//构造函数
        public abstract void method(T t);//抽象方法 不需要方法体
    }

     class ordinaryClass: TgenClass<int>//普通派生类
    {
        public override int Filed
        {
            get { return base.Filed; }
        }

        public ordinaryClass(int t) : base(t) { }//构造函数
        public override void method(int t)
        {
            Console.WriteLine("Field属性值为:{0}", t);
        }

    }

    class Program
    {
        static void Main(string[] args)
        {
            int val = 1000;
            ordinaryClass oc = new ordinaryClass(val);
            oc.method(val);
            Console.WriteLine("普通类继承泛型类演示成功");
            Console.ReadKey();
        }
    }
}

结果:

Field属性值为:1000
普通类继承泛型类演示成功

泛型继承之泛型类继承泛型类

C#19泛型

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace _19._8泛型继承之泛型类继承泛型类
{

    //定义泛型基类
    //<T>T可以是任意的标识符,只要遵循我们的通常c#中的命名规则即可,比如多参数T1,T2,T3
    abstract class TgenBaseClass<T1,T2>
    {
        //定义两个字段
        public T1[] str;
        public T2[] ind;//索引字段
        //定义一个索引属性
        public T1 this [int index]
        {
            get { return str[index];}
            set { str[index] = value; }
        }
        //定义一个获取数组长度的属性
        public int length
        {
            get { return str.Length; }//只读
        }
        //构造函数
        public TgenBaseClass(int index)
        {
            str = new T1[index];
            ind = new T2[index];
        }



    }
    //定义派生泛型类
    class TgenClass<T>:TgenBaseClass<T,int>
    {
        public TgenClass(int index):base(index)
        {
            for(int i=0;i<length;i++)
            {
                ind[i] = i;
            }
        }
        //派生类中定义一个output方法
        public void output()
        {
            for(int i=0;i<length;i++)
            {
                Console.WriteLine(str[i].ToString());   
            }
        }
    }

    class Program
    {
        static void Main(string[] args)
        {
            //实例化
            TgenClass<string> gc = new TgenClass<string>(6);
            //添加元素的过程
            gc[0] = "first";
            gc[1] = "second";
            gc[2] = "third";
            gc[3] = "fourth";
            gc[4] = "fifth";
            gc[5] = "sixth";
            
            //调用方法,遍历元素
            gc.output();
            Console.WriteLine("泛型继承之泛型类继承泛型类演示成功");
            Console.ReadKey();
        }
    }
}

结果:

first
second
third
fourth
fifth
sixth
泛型继承之泛型类继承泛型类演示成功

泛型集合接口概述

C#19泛型C#19泛型C#19泛型C#19泛型C#19泛型C#19泛型
C#19泛型C#19泛型

泛型接口的使用

C#19泛型

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace _19._10泛型接口的使用
{
    public interface IMyinterface { }
    public interface IMyinterface<T> { }
    public interface IMyinterface <T1,T2>{ }

    public interface IRelation<T1,T2>
    {
        int Forward(T1 forward);//参数类型要么是封闭的,要么是由接口的参数列表来决定的
        int Afater(T2 after);//只提供表示,不实现
        T1 GetForward(int index);

        void GetAfter(int index, out T2 after);
        void change(ref T1 forward, ref T2 after);
    }

    class Program
    {
        static void Main(string[] args)
        {
            

        }
    }
}

定义泛型方法

C#19泛型C#19泛型

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace _10._11定义泛型方法
{
    public class myclass
    {
        //定义泛型方法
        public bool Contains<T>(T[] TArray,T TValue)
        {
            //遍历元素
            foreach(T t in TArray)
            {
                //判断是否存在TValue
                if (t.Equals(TValue))
                    return true;//存在返回true

            }
            return false;//不存在返回false
        }

    }



    class Program
    {
        static void Main(string[] args)
        {
        }
    }
}

调用泛型方法

C#19泛型

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace _19._12调用泛型方法
{
    public class myclass
    {
        //泛型方法实现
        public bool Contains<T>(T[] TArray,T TValue)
        {
            foreach(T t in TArray)
            {
                if (t.Equals(TValue)) return true;

            }
            return false;
        }
    }

    class Program
    {
        static void Main(string[] args)
        {
            int[] myint = new int[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
            myclass mc = new myclass();
            bool mybool;
            int testInt = 50;

            完整调用
            //mybool = mc.Contains<int>(myint, testInt);

            //简写调用
            mybool = mc.Contains(myint, testInt);
            if (mybool) Console.WriteLine("数组中包含有元素" + testInt);
            else Console.WriteLine("数组中不存在元素" + testInt);

            Console.ReadKey();

        }
    }
}

结果:

数组中不存在元素50

C#19泛型C#19泛型

上一篇:19. 删除链表的倒数第 N 个结点


下一篇:算法19 leetcode 237. 删除链表中的节点 java