深入理解C#(一)

来源:互联网 发布:windows2003隐藏软件 编辑:程序博客网 时间:2024/05/17 03:54

深入理解C#

1.      list排序以及搜索

 

using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks; namespace ConsoleApplication16{    public class Product    {        string name;        public string Name        {            get { return name; }        }         decimal price;        public decimal Price        {            get { return price; }        }         public Product(string n, decimal d)        {            this.name = n;            this.price = d;        }     }    class Program    {        static void Main(string[] args)        {            List<Product> plist = new List<Product>();            plist.Add(new Product("C#", 10));            plist.Add(new Product("java", 8));            plist.Add(new Product("C++", 15));             //C#2.0 不需要实现比较接口进行排序            plist.Sort((x, y) =>x.Price.CompareTo(y.Price));             //扩展方法进行排序orderby            foreach (var item in plist.OrderBy(p=>p.Price))            {                Console.WriteLine(item.Price);            }             Predicate<Product> test = x => x.Price > 10;            List<Product> matches = plist.FindAll(test);             Action<Product> print = Console.WriteLine;            matches.ForEach(print);            foreach (var item in matches)                print(item);             Action<String> printStr = Console.WriteLine;            foreach (var item in plist.Where(p => p.Price > 8))                printStr(item.Name);             Console.Read();        }    }}

C#1核心 委托:如果代码想要执行操作,但又不知道操作细节,一般可以用委托

构成1:声明委托类型2.必须有一个方法包含了要执行的代码3.创建一个委托实例4.调用委托实例

将事件看做类似于属性(property)的东西是很有好处的。首先,两者都声明为具有

一种特定的类型。对于事件来说,必须是一个委托类型。

使用属性时,感觉就像是直接对它的字段进行取值和赋值,但你实际是在调用方法,也就

是取值方法和赋值方法①。实现属性时,可以在那些方法中做任何事情。但凑巧的是,大多数

属性都只是实现了简单的字段,有时会在赋值方法中添加一些校验机制,有时则会添加一些线

程安全性。

同样,在订阅或取消订阅一个事件时,看起来就像是在通过+=和-=运算符使用委托类型的

字段。但和属性的情况一样,这个过程实际是在调用方法(add和remove方法)。对于一个纯

粹的事件,你所能做的事情就是订阅(添加一个事件处理程序)或者取消订阅(删除一个事件处理程序)。最终是由事件方法来做真正有用的事情,如找到你试图添加和删除的事件处理程序

using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks; namespace ConsoleApplication16{    delegate void DelegateTest(string str);    class Person    {        public event DelegateTest Handler;        private string name;        public string Name        {            get { return name; }        }         private string sayWords;        public string SayWords        {            get { return sayWords; }        }         public Person(string name, string saywords)        {            this.name = name;            this.sayWords = saywords;        }         public void OutPutStr(string str)        {            Console.WriteLine(str + sayWords);        }         public void TestHandle(string str)        {            Handler(str);        }    }    class staticTest    {        public static void OutPutStr(string str)        {            Console.WriteLine(str);        }    }    class Program    {        static void Main()        {            Person p1 = new Person("Li", "Hello");            DelegateTest dt = p1.OutPutStr;            dt(p1.SayWords);            DelegateTest dt2 = staticTest.OutPutStr;            dt2("hello");             DelegateTest d3 = dt + dt2;            d3("hello");             DelegateTest d4 = d3 - dt;            d4("hello");             p1.Handler += staticTest.OutPutStr;            p1.TestHandle("event");            Console.Read();        }    }}


 

 

0 0
原创粉丝点击