C#学习笔记

本文探讨了多种核心编程概念和技术,包括集合比较、控制翻转、异步与多线程的应用场景、方法重入、委托绑定的区别、纤程的概念、线程本地存储的作用、线程同步机制、值类型为何不适合作为同步锁、数据访问接口的选择、属性与特征的区别及WPF中ZAML文件的编译方式,并介绍了System.Timers.Timer中传递参数的方法。

1.      比较两个集合是否相等

方法:a、如果两个集合的items 是相同引用的对象,则直接使用sequenceEqual 方法。

               b、如果两个集合的items不是相同引用的对象,则对象的类型需要实现

                              IEquatable<T> 接口,后使用sequenceEqual方法

 

2.  控制翻转(inversion of control)是一种模式,依赖注入是实现了这种模式的方式

如果一个组件是以接口的形式写成的,他对外暴露的是接口,至于使用这个组件的其他组件怎么实现这个接口就是自己决定了,这是发生了控制权从此组件向其他组件翻转的情况。依赖不再是基于此组件的,而是基于后面的注入了。

 

3.  异步与多线程

异步用于IO密集的场景,由于存在直接读取内存的存在(DMA)

多线程用于CUP密集的场景

 

4.  方法重入

指多线程调用时,同一个方法被多个线程同时调用的情况

 

5.  委托绑定实例方法和静态方法的区别

_target,_methondPtr 是委托类型的两个成员变量

当实例方法时:_target 绑定为方法所在类型的某个实例

当静态方法时:_target 绑定为null

_methondPtr 两者都绑定为方法的地址

 

6.  当一个类中有很多事件的时候,使用stem.ComponentModel.EventHandlerList

可以有效减小对象的大小

 

7.  纤程

完全有程序员控制,操作系统不知道其的存在, 一个线程可以包含0个或者多个纤程。 在CRL 中创建的一个线程不一定对应这操作系统的一个线程,也可能对应着一个纤程

 

8.  线程本地存储(Thread Local Storage)

存储在线程块中的一个结构,用来存放该线程内共享的数据,进程内的其他线程不能访问

 

9.  线程同步

每个分配在堆上的对象都有两个额外字段,一个是类型指针,一个是同步索引。类型指针用于找到给对象,同步索引用于索引同步块数组中的同步块。

当一个对象用于同步锁时,其同步索引被指向一个可用的同步块,如果一个线程试图进入同步时,会通过同步索引找到其同步块,然后检查同步对象的同步块是否在被其他线程使用,如果在使用,就等待。

 

10.为什么值类型不能用于同步锁

由于.net中的同步机制使用的是同步块,而值类型是分派在堆栈上的,其没有同步索引,也没有同步块。使用lock关键字,将会直接导致编译错误。

使用Moniter的话,其实是使用了装箱,但是会导致运行时错误,因为每次装箱都会在堆上产生不同的对象。

 

11. 数据访问接口

OLEDB(Object Linking and Embedding,Database,又称为OLE DB或OLE-DB)

ODBC(Open DatabaseConnectivity,ODBC)开放数据库互连

 

 

11.Property(属性) 与Attribute(特征)的关系

 

Property:是面向对象编程层面上的概念, 比如抽象一个Car 类, 那么车的

速度, 颜色 等就是Property。

Attribute:是编程语言文法层面上的概念, 例如标示A类和B类有一下区别,就可以给他们加上特征。

 

12. WPF中zaml文件中x:Class=” ”的内容是告诉编译器将zaml文件编译成C#类的名称,这个名称用于和behind cold 的类合并的。


13.如何在System.Timers.Timer的回调函数中传递参数?

     思路: 采用匿名方法传递参数

Timer timer=new Timer();
timer.Elapsed += new ElapsedEventHandler((s, e) => { Callbcke(s, e, param); });

其中param为要传递的参数。

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ShuSheng007

亲爱的猿猿,难道你又要白嫖?

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值