深入理解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
- c深入理解(一)
- 深入理解C#(一)
- Objective-C Runtime深入理解(一)
- 深入理解C语言指针(一)
- 深入理解C语言(一)
- [深入理解C++(一)]类型转换(Type Casting)
- [深入理解C++(一)]类型转换(Type Casting)
- [深入理解C++(一)]类型转换(Type Casting)
- [深入理解C++(一)]类型转换(Type Casting)
- 深入理解C指针学习笔记(一)
- C语言01深入理解基本概念(一)
- 深入理解C#:编程技巧总结(一)
- 深入理解C#:编程技巧总结(一)
- 深入理解C#:编程技巧总结(一)
- 深入理解REST(一)
- 深入理解字符串(一)
- 深入理解缓冲区(一)
- 《深入理解计算机系统》(一)
- USACO [2.1] Sorting a Three-Valued Sequence
- 结合个人经历总结的前端入门方法
- 文章标题
- u-boot网络固件还原功能
- apache+openssl设置https单向认证和双向认证以及反向代理
- 深入理解C#(一)
- js变量提升
- 在谷歌和ie上加入mp4格式的视频
- 恶心人的日常问题
- androidstudio快速更新SDK方法
- Could not find class 'com.google.zxing.MultiFormatWriter', referenced from method
- Kylin 大数据时代的OLAP利器
- OpenCV获取与设置像素点的值的几个方法
- 【转载】三极管的工作原理(详细、通俗易懂、图文并茂)