深入理解C#(一)

深入理解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();
        }
    }
}


 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值