随笔分类 - C#
摘要:类型的大小不超过机器字长时,该类型的读写是原子性的,但如果超过一个机器字长,比如读写一个decimal,可能会在拷贝32位之后被打断,这个时候另一个线程的读取操作就会读取到一个不正确的值 局部变量没必要同步,因为局部变量加载到栈上,每个线程都有自己的逻辑栈 Monitor, Monitor.Ente
阅读全文
摘要:泛型 没有泛型时的问题 用object实现的通用集合类型不安全,无法保证数据元素类型一致 值类型会有额外的装箱拆箱开销 类型特化的集合每有一个新类型就需要重新实现一遍 泛型就是把类型作为参数,从而实现代码重用 C#的泛型在处理值类型的时候不会有装箱,节省性能和内存 省去类型检查的性能开销 相同泛型接
阅读全文
摘要:委托 通过委托储存传递对方法的引用,并可以通过该引用调用方法 用方法名作为委托实例或者用lambda表达式现场创建一个方法 委托是强类型的,参数和返回值的类型是固定的 Func<>有返回值,Action<>无返回值,Predicate<>返回一个bool,称为谓词,传递进去一个数据项,返回一个bol
阅读全文
摘要:反射 通过Type类型的实例来访问类型的元数据 通过obj.GetType()或typeof()获取一个Type类型的实例 在Type类型的实例上通过GetProperties(),GetMethods(),GetCustomAttributes()访问类型的各种东西 GetType()只能在实例上
阅读全文
摘要:- 作用:告诉操作系统在未来的x毫秒内不再参与到CPU竞争,不需要时间片 - 问题1:1000毫秒后会准时恢复执行吗? 不会,当前线程醒了之后会进入等待队列等待分配时间片,此时可能会有其他线程正在占用CPU,则至少需要等待该线程时间片结束;而且就算此时没有正在执行的线程,当前线程的优先级也不一定是所
阅读全文
摘要:Connector/NET是Oracle官方提供的连接MySQL的类库,有两种安装方式: #### 1.NuGet(推荐) 在IDE中打开NuGet的下载页面,搜索`MySql.Data`,添加到项目即可 ,若使用in修饰类型参数T,保证“只将T用于输入”,则允许T的逆变转换;若使用out修饰类型参数T,保证“只将T用于输出”,则允许T的协变转换。下面我们解释两个问题
阅读全文
摘要:假设我们有两个类型,Animal和Dog,Dog是Animal的子类,我们定义以下两个集合: List<Animal> List<Dog> 由于Dog是Animal的子类,所以Dog可以隐式转换为Animal,但C#中,List<Dog>无法隐式转换为List<Animal>,List<Dog>与L
阅读全文