標籤: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,拓展方法