
C#基础知识随笔记录
文章平均质量分 58
q269399361
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
C#Using使用场景
C#中using关键字有三种使用场景:引入命名空间给命名空间取别名释放托管资源引入命名空间using MyNameSpace;using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace Console原创 2016-07-26 16:08:24 · 1451 阅读 · 0 评论 -
Linq(2.分组、排序、筛选)
筛选查询姓氏为A开头的冠军赛车手,并按胜利场数进行倒序排列。 //得到所有冠军赛车手 IList<Racer> champions_racers = Formula1.GetChampions(); //linq查询 var query = from r in champions_racers原创 2016-12-15 15:46:11 · 1798 阅读 · 0 评论 -
Linq(3.连表、合并、分区(分页)、转换)
连表查询 使用join可以将两个数据源按照特定的条件连接到一起内连接查询一个年份列表,查询当前年份的赛车手冠军和车队冠军 //得到所有冠军赛车手 IList<Racer> champions_racers = Formula1.GetChampions(); //得到冠军车队 IList<Team>原创 2016-12-16 16:03:13 · 1647 阅读 · 0 评论 -
集合(10-位数组)
概念 如果需要处理很多位,就可以使用位数组。数组中每一位只能是0或1,即假或真。BitArray的使用 BitArray是引用类型,长度是可以伸缩的,当不确定位的长度时可以使用。using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threadi原创 2016-12-09 15:01:58 · 545 阅读 · 0 评论 -
集合(9-可观察的集合 ObservableCollection)
特征 何为可观察的集合? 如果需要集合元素添加和删除的信息,就可以使用ObservableCollection,这个类在WindowsBase程序集定义,这个类是为WPF定义的,如集合发生变化能通知到UI示例using System;using System.Collections.Generic;using System.Linq;using System.Text;using原创 2016-12-06 16:48:05 · 1312 阅读 · 0 评论 -
集(8-HashSet、SortedSet)
集的概念 集 set 不是 集合 list,集合可以包含可重复的元素,集中包含的元素是唯一的,不能有重复HashSet和SortedSet的区别共同点: 1. 都是集,都具有集的特征,包含的元素不能有重复不同点: 1. HashSet的元素是无序的,SortedSet的元素是有序的示例using System;using System.Collections.Generic;using原创 2016-12-06 16:09:49 · 498 阅读 · 0 评论 -
Linq(1.延迟的查询执行)
Linq的概念 什么是linq? C#集成了查询语法,可以使用相同的语法查询不同的数据源。Linq提供了不同数据源的抽象层,所以可以使用相同的语法。如:Linq可以查询数据库(EF),还可以查询XML,json等。 使用linq的好处? 使用相同的语法查询不同的数据源学习Linq的初始数据准备Racer.csusing System;using System.C原创 2016-12-12 16:41:09 · 744 阅读 · 0 评论 -
集合总结篇
集合名称 传送门 特点 List<T> —— 列表 传送门 表示可通过索引访问的对象的强类型列表。 提供用于对列表进行搜索、排序和操作的方法。 Queue<T> —— 队列 传送门 表示对象的先进先出集合(FIFO)。 Stack<T> —— 栈 传送门 表示相同任意类型的实例的可变大小的后进先出 (LIFO) 集合。 LinkedList<T>原创 2016-12-12 14:50:56 · 339 阅读 · 0 评论 -
集合(7-有序字典SortedDictionary)
SortedDictionary和SortedList使用方法一样样的,具体有些区别如下: 1. SortedList类使用的内存比SortedDictionary类少 2. SortedDictionary类的元素插入和删除速度比较快 3. 在用已排好序的数据填充集合时,若不需要修改容量,SortedList类就比较快.使用示例using System;using Syste原创 2016-12-01 16:58:52 · 2431 阅读 · 0 评论 -
反射和特性(2.反射特性信息)
1.什么是特性特性是一个对象,它可以加载到程序集及程序集的对象中,这些对象包括 程序集本身、模块、类、接口、结构、构造函数、方法、方法参数等,加载了特性的对象称作特性的目标。特性是为程序添加元数据(描述数据的数据)的一种机制,通过它可以给编译器提供指示或者提供对数据的说明。2.使用FCL内置特性这是一个发送短信的示例,我们将短信需要的参数以方法参数的形式一个个代入方法。后期参数越来越多显然是使方法扩原创 2016-12-30 15:56:44 · 1995 阅读 · 0 评论 -
反射和特性(1.反射基本信息)
1.反射的作用简单来说,反射提供了如下几种能力: 1. 查看和遍历类型和成员的基本信息以及程序集元数据 2. 迟绑定属性和方法 3. 动态创建实例2.获取Type的三种方式反射的核心是Type类,这个类封装了关于对象的信息,也是进行反射的入口。当你获得了关于类型的Type对象后,就可以根据Type提供的属性和方法获取这个类型的一切信息(方法、字段、属性、事件、参数、构造函数等)。2.1 通过静原创 2016-12-29 14:08:06 · 727 阅读 · 0 评论 -
多线程编程(1.线程池ThreadPool)
什么是线程池(Pool)?水池装水,线程池装线程。池(Pool)是一个很常见的提高性能的方式,之所以有这些池是因为线程和数据库连接的创建和关闭是一种比较昂贵的行为。对于这种昂贵的资源我们往往会考虑在一个池容器中放置一些资源,在用的时候去拿,在不够的时候添点,在用完就归还,这样就可以避免不断的创建资源和销毁资源。最大线程(MaxThreads)?池中能容纳的最大线程数,就好比一个5L的水桶,硬是要装1原创 2017-03-07 15:33:01 · 528 阅读 · 0 评论 -
消息队列MSMQ
消息队列消息队列(英语:Message queue)是一种进程间通信或同一进程的不同线程间的通信方式,软件的贮列用来处理一系列的输入,通常是来自使用者。消息队列提供了异步的通信协议,每一个贮列中的纪录包含详细说明的资料,包含发生的时间,输入装置的种类,以及特定的输入参数,也就是说:消息的发送者和接收者不需要同时与消息队列互交。消息会保存在队列中,直到接收者取回它。 简单的说队列就是贮存了我们需要处原创 2017-03-10 16:00:55 · 674 阅读 · 0 评论 -
任务线程和同步(二、Task)
在我们了解Task之前,如果我们要使用多核的功能可能就会自己来开线程,然而这种线程模型在.net 4.0之后被一种称为基于“任务的编程模型”所冲击,因为task会比thread具有更小的性能开销,不过大家肯定会有疑惑,任务和线程到底有什么区别? 1:任务是架构在线程之上的,也就是说任务最终还是要抛给线程去执行。2:任务跟线程不是一对一的关系,比如开10个任务并不是说会开10个线程,这一点任务转载 2017-03-06 14:17:22 · 946 阅读 · 0 评论 -
任务线程和同步(一、Parallel)
随着多核时代的到来,并行开发越来越展示出它的强大威力,像我们这样的码农再也不用过多的关注底层线程的实现和手工控制,要了解并行开发,需要先了解下两个概念:“硬件线程”和“软件线程”。 1. 硬件线程 相信大家手头的电脑都是双核以上的,像我这样古董的电脑都是双核的,这样的双核叫做物理内核。 硬件线程又叫做逻辑内核,我们可以在”任务管理器“中查看”性能“标签页,如下图,我们知道有2个硬件线转载 2017-03-06 11:09:45 · 790 阅读 · 0 评论 -
异步编程
为什么需要异步,异步对可能起阻止作用的活动(例如,应用程序访问 Web 时)至关重要。 对 Web 资源的访问有时很慢或会延迟。 如果此类活动在同步过程中受阻,则整个应用程序必须等待。 在异步过程中,应用程序可继续执行不依赖 Web 资源的其他工作,直至潜在阻止任务完成。在前面的章节已经知道了C#有三种方式进行异步调用:using System;using System.Collections.G原创 2017-03-09 11:52:52 · 396 阅读 · 0 评论 -
多线程编程(3、多任务并发处理)
例:假设我们有个方法要执行100次,得到100次返回的结果总和。串行执行 static void Main(string[] args) { SerialExcute(); Console.ReadLine(); } /// <summary> /// 串行执行,要阻塞主线程原创 2017-03-08 15:57:43 · 3900 阅读 · 0 评论 -
序列化和反序列化
序列化:将实体对象序列化为指定格式,如序列化为XML文件又或者是序列化为JSON字符串等。 反序列化:将XML文件或者JSON字符串等转换为实体对象。准备实体数据1.首先新建一个控制台工程,建立实体Company(公司类)、Employee(员工类)、ESex(性别枚举) public class Company { /// <summary>原创 2017-02-24 10:42:34 · 497 阅读 · 0 评论 -
反射和特性(3.动态创建和调用)
动态创建对象在前面节中,我们先了解了反射,然后利用反射查看了类型信息,并学习了如何创建自定义特性,并利用反射来遍历它。可以说,前面三节,我们学习的都是反射是什么,在接下来的章节中,我们将学习反射可以做什么。在进行更有趣的话题之前,我们先看下如何动态地创建一个对象。我们新建一个控制台项目。然后,添加一个示范类,本文中将通过对这个示范类的操作来进行说明:public class test {原创 2017-02-10 15:23:14 · 422 阅读 · 0 评论 -
集合(6-Lookup)
Lookup的概念 Lookup 类似于 Dictionary,但把键映射到一个值集上 (通俗讲法就是一个键对应多个值) 这个类在程序集System.Core中实现,用System.Linq命名空间定义。 它不能像一般的字典那样创建,而必须调用方法ToLookup()。 Lookup和IGrouping有点类似但又有点区别。示例参考示例首先建一个产品类:有ID、类别、价格in原创 2016-12-01 16:45:47 · 484 阅读 · 0 评论 -
集合(5-有序列表SortedList)
有序列表的概念 SortedList是一组存储键值的数据结构,一个键只能对应一个值。如果需要通过键对集合进行排序,那么SortedList在合适不过了。具体可参看MSDN使用示例using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading;原创 2016-12-01 15:30:04 · 946 阅读 · 0 评论 -
yield语句
yield简介 yield是自C#第二个版本一来所添加的新的语法,目的是为了简化foreach迭代集合。第一个版本迭代集合需要创建迭代器Enumeratoryield的好处: 为了简化foreach迭代集合是创建迭代器。foreach迭代(手动创建迭代器)那么不用yield来简化创建迭代器,需要相当繁琐的代码首先需要迭代的类必须继承 IEnumerable 接口并且实现接口的成员 Ge原创 2016-10-14 11:35:02 · 1904 阅读 · 0 评论 -
集合(1-列表List)
IEnumerable IEnumerable接口支持非泛型能够使用foreach进行迭代,结构只有GetEnumerator方法,返回 IEnumerator 类型。 . 名称 说明 GetEnumerator() 返回一个循环访问集合的枚举数。IEnumerator类型IEnumerator foreach 迭代器,GetEnumerator需要返回的接口类型,有原创 2016-11-04 16:43:44 · 661 阅读 · 0 评论 -
C# 泛型
泛型的概念 什么是泛型? 泛型类似于C++中的模板,是C#语言的一部分,与IL紧密集成。与C++模板不同的是,C++使用模板时必须要模板源码。泛型可以创建与独立被包含的类和方法,不需要为每种类型编写不同的类或方法。泛型的优点性能var list = new ArrayList();list.Add(10);int l1 = (int)list[0];这里首先list.Add方法经过一原创 2016-08-25 15:52:55 · 426 阅读 · 0 评论 -
C# 对象和类
对象:是对客观事物的抽象 类 : 是对对象的抽象 类和对象是面向对象编程的一个重要组成,类是对象的模板,对象是类的实例。类类和结构的区别 1.关键字异同:类使用class,结构使用 2.存储地址不同:类存储在托管堆属于引用类型,结构属于值类型,存储在栈中。 3. 继承异同:类可以继承类或接口,结构不能继承类或结构只能继承接口 4. 构造函数不同:结构无原创 2016-08-02 16:19:15 · 592 阅读 · 0 评论 -
C# 抽象类和接口
在介绍抽象类和接口之前,首先介绍一下访问修饰符 public:公共的,没有任何限制,所有代码都可以访问 private:私有的,只有类内部可以访问 protected:受保护的,只有本类或派生类中可以访问 internal:当前程序集中任何代码都能访问 protected internal:当前程序集中的派生类或本类可以访问 static:静态的,作用于类,不作用原创 2016-08-03 17:50:13 · 393 阅读 · 0 评论 -
C# 继承图解
图解继承using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace ConsoleApplication21{ class Program { static void Main(原创 2016-08-03 15:26:01 · 1019 阅读 · 0 评论 -
C#变量
C#中变量的介绍,包含变量的初始化,弱类型var,变量的作用于,常量,值类型和引用类型的区别,以及CTS类型原创 2016-07-18 10:41:27 · 950 阅读 · 0 评论 -
C#预处理指令
什么是预处理指令? 预处理指令可以按条件跳过相应不符合条件的代码进行编译。 预处理指令的用途: 当计划发布两个版本的代码时,如基础版和拥有更多功能的企业版,可以用到预处理指令。 在编译基本版的时候,使用预处理指令会禁止编译器编译与额外功能相关的代码。#define指令define指令,可以把它看做成声明一个变量。具体和代码中申明变量又有如下区别:define指原创 2016-07-26 19:56:28 · 1151 阅读 · 0 评论 -
Tuple元组
Tuple简介 元组是C# 4.0后出的新特性,数组合并了相同类型的对象,元组合并了不同类型的对象Tuple的好处 最常用的一种方式就是替代了out,使用out多返回一个值还是挺简单,但是假设一个方法要返回N个值,那么out写起来就有点繁琐了。使用out返回多个值using System;using System.Collections;using System.Collection原创 2016-10-14 14:17:43 · 380 阅读 · 0 评论 -
C#运算符重载
运算符重载的概念 提出运算符重载的理念是:用户自定义数据类型,应该像内置类型一样。 运算符重载是多态的一种体现 多态:OOP的一个重要思想,即发出同一个消息被不同的对象接收会导致完全不同的行为运算符重载的好处使代码简介优美提高编码效率更加符合OOP的思想运算符重载实例为什么会说符合OOP思想呢?试想一下,在数学领域,矩阵是可以相加的,和数字一样。代码中,用户自定义的类型(矩原创 2016-10-25 17:29:41 · 1338 阅读 · 0 评论 -
集合(4-链表 LinkedList)
链表的概念 链表是一串存储数据的链式数据结构,它的每个成员都有额外的两个空间来关联它的上一个成员和下一个成员。所以,链表对于插入和删除操作效率会高于ArrayList,因为它存储了上一个成员和下一个成员的指针,进行插入和删除只需要改变当前LinkedListNode的Previous和Next的指向既可链表的内存表视图常用方法更多方法请参考MSDN简单使用示例using System;usi原创 2016-12-01 14:59:44 · 416 阅读 · 0 评论 -
事件
事件的概念 C#中加入了事件的原因: 其一:是为了符合observer(观察者)模式 其二:为了程序哲学问题,引入了事件,事件能做的委托都可以做到,但是为什么还要有事件?这就是哲学问题了。具体看文章底部总结。事件的使用例:有一个时钟在运行,观察者需要时钟产生变化后进行相应操作。第一步:首先定义一个时钟,并提供Run方法让时钟运行,运行期间,如时间产生变化,需要通知观察者 这个原创 2016-11-01 16:15:02 · 337 阅读 · 0 评论 -
委托(3.匿名方法、lambda、闭包、foreach)
三种方法实例化委托using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace ConsoleApplication30{ class Program { static void原创 2016-11-01 14:27:41 · 1026 阅读 · 0 评论 -
委托(2.多播委托)
多播委托的理解 上节介绍的委托都是只包含一个方法的调用,其实委托可以包含N个方法的,调用时候以加入的顺序来进行。 可以使用 +=来将一个方法加入委托 -=从委托中删除一个方法的引用。多播委托的注意事项之方法返回值多播委托中,如方法有返回值的话,只能接收到最后一个方法调用的返回值using System;using System.Collections.Generic;using Syste原创 2016-10-31 17:12:49 · 476 阅读 · 0 评论 -
委托(1. 冒泡排序自定义类型)
委托是寻址方法的.net版本,类似于C++中的函数指针,只不过C++中的函数指针是直接操作内存地址,而委托是类型安全的,它有参数,函数返回值等。原创 2016-10-31 16:27:36 · 454 阅读 · 0 评论 -
集合(3-栈 Stack)
栈的概念 栈是一种先进后出(LIFO)的数据结构,和队列(FIFO)恰好相反。栈的内存表视图常用方法 . 名称 说明 Push(T) 在 Stack 的顶部插入一个对象。 Pop() 移除并返回位于顶部的对象 Stack。 Peek() 返回的对象顶部的 Stack 而不删除它。 更多方法请参考MSDN简单使用示例 stat原创 2016-11-07 16:11:29 · 411 阅读 · 0 评论 -
集合(2-队列 Queue)
队列的概念 队列是一种先进先出的数据结构(FIFO),就好比排队买票,第一个排队的人第一个买到票,中途不能插队,只能在队伍末尾依次排入队列,也只能从头部依次取票队列的内存表视图常用方法 . 名称 说明 Enqueue(T) 将对象添加到 Queue 的结尾处。 Dequeue() 移除并返回位于 Queue 开始处的对象。 Peek() 返回原创 2016-11-07 16:00:05 · 640 阅读 · 0 评论 -
C#自定义类型的强制转换
语法public static (显示:explicit 隐式:implicit) operator (目标类型)(源数据){}示例/// <summary> /// v可以显示转换为boolean类型 /// </summary> public static explicit operator Boolean(Vector v)原创 2016-10-25 18:00:39 · 4594 阅读 · 0 评论 -
多线程编程(2.Timer)
Threading.Timer internal sealed class UnSafelTimer { private static Timer timer; private static object unsafel_lock = new object(); private static int count = 0;原创 2017-03-07 17:03:28 · 389 阅读 · 0 评论