• 学习杂记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;
            }
        }
    
    
    }
  • 相关阅读:
    教你如何用Meterpreter渗透Win系统
    Maven 自动打包上传到私服 Nexus
    从同事的一个提问想到的学习途径
    SAS学习笔记之《SAS编程与数据挖掘商业案例》(1)系统简介和编程基础
    StackOverflowError&OutOfMemoryError区别
    优先使用TimeUnit类中的sleep()
    Java 开源博客 Solo 1.3.0 发布
    Java 开源博客 Solo 1.3.0 发布
    Cleanup failed to process the following paths错误的解决
    Java&Xml教程(六)使用JDOM解析XML文件
  • 原文地址:https://www.cnblogs.com/springword/p/6130878.html
Copyright © 2020-2023  润新知