.Net的一些基本知识

ArrayList对象
ArrayList对象在实现的时候是线程安全的,同时支持多个读取进程进行操作,在不修改的情况下。但是如果你使用了枚举器可能会导致多线程不安全问题,因为枚举器不是线程安全的,所以你需要在使用枚举器的时候锁定它。

程序集文件dll/exe和程序集清单Assembly
程序集文件主要包含:
程序集清单
类型元数据
微软中间语言
其他资源。

程序集清单主要包括:
程序集名称
版本信息
区域信息
强名称信息
程序集文件列表
类型引用信息
引用和依赖程序集信息

DllImport属性
DllImport属性是主要是用在导入非托管代码的函数,比如调用c/c++编写的函数在c#,那么你需要用到DllImport属性,很多的WinApi调用都需要这个属性。
DllImport的属性主要有四个:
EntryPoint : 说明该函数是来自哪个dll文件,也就是这个dll的入口函数在哪个文件上。
CharSet:该属性用于控制名字和字符串序列化。.Net framework支持四种模式的CharSet: Auto, Unicode, None, Ansi。不同版本的framework可能默认的CharSet不一样,在Compact版本上是Unicode,而普通版上是Ansi。
CallingConvention:这个属性是指明对dll导出函数采用什么规范,我们知道dll的到处函数有__stdcall, __fastcall, __cdecl, __declspec这几种。那么我们根据对应的dll,通过这个属性来设置。但大多数情况下,wins 下导出的api都是__stdcall规范的,所以framwork设置的默认值是WinApi.这个会在CE和普通版上自动转换。
SetLastError:这个属性用过WinApi的都知道,Wins有一个GetLastWin32Error的API所以这属性跟它对应,如果函数调用失败操作系统会设置一个错误号。在C#语言中默认是false。

Foreach 和 For
大家都知道Foreach是C#语言提供的一个比较方便的关键字用于遍历成员。但是目标对象必须是一个集合对象,如list,array等,当然也可以是你自己实现的对象,不过要继承IEnumerable接口和IEnumerator接口。那么for和foreach差别在哪里呢?
for (int i=0 ; i<array.length; i++)
      do something...

for (int i in array)
     do something ...
我们知道IEnumerator接口需要实现MoveNext和Current。
public bool MoveNext() // return value check
    {
        position++;
        return (position < _people.Length); 
    }

public object Current // function call
    {
        get
        {
            try {
  return _people[position];
            }
            catch (IndexOutOfRangeException)
            {
                throw new InvalidOperationException();
            }
        }
    }
从这两个函数上可以看出使用foreach至少要比for多一次bool的check和一次function call。当我们运算大数据量的时候这个效率就会差很多。

Data Access Application Block for .NET
这个东西是一个类SqlHelper,很好用在用于数据库访问的时候。它封装了对ADO.net的大部分常用操作,免去很多重写的烦恼。
具体的内容看这里
posted @ 2008-03-18 10:04  moonz-wu  阅读(719)  评论(0编辑  收藏  举报