学习杂记1:c#,顺序泛型栈,泛型委托,Lambda,拓展方法

Posted Recho

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了学习杂记1:c#,顺序泛型栈,泛型委托,Lambda,拓展方法相关的知识,希望对你有一定的参考价值。

    最近又重新回过头来学习C#,才发现之前学习的知识有多么的浅显,有些东西还是挺难懂的,但是比较有意思,例如协变,逆变,不变就挺有意思,但是也挺绕,下面是学习过程中写的一些代码,有点乱,就当日记记叙一下。

  

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

namespace Genericity泛型
{

    //泛型委托
    public delegate R MyDelegate<T, R>(T t);



    class Program
    {

        static void Main(string[] args)
        {
            
            MyStack<int> stack = new MyStack<int>(5);
            var stack1 = new MyStack<string>(8);

            while(!stack.IsFull)
            {
                stack.Push(2);
            }
            while(!stack.IsEmpty)
            {
                stack.Pop();
            }

            MyDelegate<string, string> s;
            s = stack.PrintString;

            //Lambda表达式
            s += (string a) => { return a; };
            Console.WriteLine(s("safa"));



            Console.WriteLine("这个栈的长度为:{0}",stack.GetLength<int>());

            Console.ReadKey();
        }

      


    }
    //顺序栈,泛型
    public class MyStack<T>
    {
        T[] StackArray;
        public int Length;
        int StackPointer;

     
        
        
        public string PrintString(string a)
        {
            return a;
        }

        public bool IsEmpty
        {
            get
            {
                return StackPointer == 0 ? true : false;
            }
        }

        public bool IsFull
        {
            get
            {
                return StackPointer >= Length ? true : false;
            }
        }

        public MyStack(int _length)
        {
            Length = _length;
            StackArray = new T[Length];
            StackPointer = 0;
        }

        public void Push(T _value)
        {
            if (IsFull)
            {
                Console.WriteLine("栈已经满");
            }
            StackArray[StackPointer++] = _value;
        }

        public void Pop()
        {
            if (IsEmpty)
            {
                Console.WriteLine("栈已空");
            }
            Console.WriteLine(StackArray[--StackPointer]);
        }

        public void StackPrint()
        {
            foreach (var i in StackArray)
            {
                Console.WriteLine(i);
            }
        }
    }

    //拓展方法
    public static class ExtendStack
    {
        public static int GetLength<T>(this MyStack<T> ms)
        {
            return ms.Length;
        }
    }


}

 

以上是关于学习杂记1:c#,顺序泛型栈,泛型委托,Lambda,拓展方法的主要内容,如果未能解决你的问题,请参考以下文章

泛型栈

《C#零基础入门之百识百例》(八十一)泛型概念介绍 -- 泛型类/结构/接口/委托

关于学习C#泛型委托过程中发现的一些疑惑,大家一起讨论下

c#中的泛型委托(@WhiteTaken)

委托 ,事件,泛型学习总结

C#规范整理·泛型委托事件