C#泛型与linq

泛型

  我们仔细观察类中的代码看那些类型需要修改,每次需要新类型(long,double,string),我们都需要重复这个过程。在这些过程之后,我们有了很多几乎相同代码的类,占据了额外的空间。调试和维护这些代码不但复杂而且容易出错。 

  定义:泛型(generic)可以软糖多个类型共享一组代码,泛型允许我们声明类型参数化。可以用不同的类型进行实例化,说白了,就是可以用类型占位符,创建具体类型致命的真实概念。C#中提供了五种泛型,类,结构,接口,委托和方法。

class MyStack<T>
    {
        T[] statkArray;
        int stackPointer = 0;
        const int MaxStack = 10;
        bool IsStackFull { get { return stackPointer < MaxStack; } }
        bool IsStackEmpty { get { return stackPointer <= 0; } }


        public void Push(T x)
        {
            if (!IsStackFull)
            {
                statkArray[stackPointer++] = x;
            }

           
           
        }

        public T Pop()
        {
            return(!IsStackEmpty)?statkArray[--stackPointer]:statkArray[0];
        }

        //int[] arr={1,2,3,4};

        public void Print()
        {
            for (int i = stackPointer-1; i>=0 ; i--)
            {
                Console.WriteLine("value;{0}",statkArray[i]);
            }
        }
}

 

static void Main(string[] args)
        {
            MyStack<int> stackint = new MyStack<int>();
            MyStack<string> stackstring = new MyStack<string>();

            stackint.Push(3);
            stackint.Push(5);
            stackint.Push(7);
            stackint.Push(9);

            stackint.Print();
            stackstring.Push("Hava a good day");
            stackstring.Push("Hi there!");
            stackstring.Print();

            Console.ReadKey();



        }

 泛型委托:

class simple
    {

        static public void PrintString(string s)
        {
            Console.WriteLine(s);
        }

        static public void PrintUpperString(string s)
        {
            Console.WriteLine("{0}",s.ToUpper());
        }
    }


delegate  void MyDelegate<T>(T value);
    class Program
    {
        static void Main(string[] args)
        {
            var mydel = new MyDelegate<string>(simple.PrintString);
            mydel += simple.PrintUpperString;

            mydel("rocky");
            Console.ReadKey();
        }
    }

 泛型接口:

interface IMyfc<T>
    {
        T returnIt(T inValue);
    }



class Simple<S>:IMyfc<S>
    {

        public S returnIt(S inValue)
        {
            return inValue;
        }
    }



class Program
    {
        static void Main(string[] args)
        {
            var trivInt = new Simple<int>();
            var trivString = new Simple<string>();
            Console.WriteLine(trivInt.returnIt(5));
            Console.WriteLine(trivString.returnIt("张三"));

            Console.ReadKey();
        }
    }

 linq:

class Program
    {


        static void Main(string[] args)
        {


            int[] array = { 11, 12, 13, 14 };
            Func<int, int> func = new Func<int, int>(Method);

            var arr = array.Select(func);
            foreach (var item in arr)
            {
                Console.WriteLine(item);
            }

            Console.ReadKey();

        }

        static int Method(int x)
        {
            if (x == 12)
            {
                return x;
            }
            else
            {
                return 0;
            }
        }
    }

 

C#泛型与linq

上一篇:windows下taskkill命令简介


下一篇:jbpm API的helloword实例