码迷,mamicode.com
首页 > Windows程序 > 详细

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

时间:2016-12-04 16:55:42      阅读:218      评论:0      收藏:0      [点我收藏+]

标签:linq   nbsp   his   []   代码   length   stack   表达   过程   

    最近又重新回过头来学习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,拓展方法

标签:linq   nbsp   his   []   代码   length   stack   表达   过程   

原文地址:http://www.cnblogs.com/springword/p/6130878.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!