zoukankan      html  css  js  c++  java
  • 学习杂记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;
            }
        }
    
    
    }
  • 相关阅读:
    如何导出和导入mysql数据(数据迁移)
    C# exe dll防止反编译-- dotNET_Reactor
    C#防止反编译
    WCF异常相关
    了解WCF的前世今生之实现服务端(一)
    svn忽略文件后缀
    马云给年轻人的10句忠告 真的后悔才看到!
    如何利用好清晨与夜间的时间?
    浙江旅游好去处
    突然觉得生活好累......
  • 原文地址:https://www.cnblogs.com/springword/p/6130878.html
Copyright © 2011-2022 走看看