初识C#

C#大凡微软公司颁布之面向对象的、运行于.NET
Framework之上的高等程序设计语言。与Java有显著例外,借鉴Delphi的风味,与COM(组件对象模型)直接集成,是微软公司
.NET windows网络框架的主角。
C#凡同栽语言,.net是一个平台。C#不独可付出基于.net的应用程序,也堪出基于WinForm的次序。.
net 是 Microsoft 的 XML Web 服务平台,XML Web 服务会要应用程序在
Internet 上传和共享数据。  
特点

  • 强类型语言,安全稳定;
  • 事件驱动、完全面向对象的可视化编程语言;
  • 便捷的面向组件编程的支持;
  • VB简单的可视化操作与C++的大周转效率的三结合;
  • 托管代码和废品回收 (garbage collection);

    // .NET ~ C# ~ ASP.NET
    C#是.net平台下的如出一辙种植出语言,用于开发桌面应用程序
    asp.net是出web程序的艺
    .net是平台,该平台下富含众多技艺使:asp.net ado.net winform WCF

.NET框架
CLR:公共语言运行库,Common Language
Runtime,.NET框架的中心器件,在操作系统的顶层并在运行期调用基类库(BCL,
Base Class Library)管理程序的尽。

  • 内存管理机制
  • 废品回收机制GC (Garbage Collector)
  • JIT编译器

CTS:公共项目系统,Common Type
System,重要特色是兼具品种且连续自公共的基类object。

基本功学习

4独基础命名空间

// .NET框架中的基础类库,用于实现一些基本的类。
using System; .NET应用程序中使用的大多数基本类型
using System.Collections.Generic; 处理集合的泛型类型
using Syatem.Text; 字符串处理和编码相关的类型
using System.Linq; 提供支持使用语言集成查询(LINQ)进行查询的类和接口,用于对集合进行查询
  1. 结构 – 类

struct 是值类型,隐式密封的、不能够叫持续,但足以兑现接口。struct
成员默认是
public,有构造函数(实例、静态),没有析构函数,不允字段初始化。
class 是引用类型,单继承,可实现接口。class 成员默认是 private。

  • 数据成员:字段、常量;
  • 函数成员:属性、方法、事件、索引器、构造函数、析构函数、操作符;

  • 字段 – 属性 – 索引
    字段 – private,属性 – public;
    属于性
    是指定的平等组2独相当的、称为访问器 (get 和 set)
    的点子。属性是函数成员,访问器只能于隐式调用,执行代码,但未呢多少存储分配内存。公有属性提供针对性私有字段的受控访问。
    索引 是平等组 get 和 set
    访问器,类似性,目录是函数成员;索引通常用于访问多个数据成员,类似数组利用寻引运算符;索引不能够声称也
    static。访问器只能让隐式调用,好重载,参数列表必须不同。

  • 目录没有称谓,但 this 是须的;

  • 参数列表中最少要声明一个参数;

    ReturnType this[参数列表] {

     get {...}
     set {...}
    

    }

  • 静态构造函数 –
    (普通的)实例构造函数
    实例构造函数初始化类的每个新实例,static
    构造函数初始化类层次之门类。static
    构造函数不克访问类的实例成员,通常用于初始化类的静态字段,静态构造函数被网活动调用。静态字段先于实例成员为初始化,类只能有一个
    static 构造函数,不克带动参数、不可知来看修饰符、也无能够采取 this 访问器。

[1]. 构造函数中不可知调用虚方法

[2]. 构造函数初始化器关键字:this,base,控制类中构造函数的实践顺序

[3].
静态构造函数只见面为执行同一不好(在创立第一单实例或引用任何静态成员之前,且由.NET自动调用)

[4].
静态构造函数在程序域(AppDomain)的层级确保特见面履同一不成,且线程安全

[5]. 静态构造函数非常适于在么模式受到(或单待单一对象的地方)

至于两岸的实际信息参见:http://www.cnblogs.com/jiagoushi/p/3775046.html

  1. 继承
    单继承。
    a. 重载:同一个看似内之函数,函数称相同、参数列表不同;
    b. 重写(覆盖):父子类中的函数,签名相同、返回路相同;父类用 virtual
    标识,子类用 override 标识;
    c. 隐藏:默认或通过 new 显式隐藏。base.数据成员/函数名
    显式访问给隐形的积极分子。

  2. 字段:名称一致,类型相同; 

  3. 函数:签名相同(函数称为、参数列表(个数、顺序、类型、修饰符));

  4. 泛泛类 abstract – 接口 interface (抽象类 – 自底向上,接口 –
    自到向下)
    a. 抽象类可让来某些成员的一对实现,接口不克包含成员贯彻;
    b.
    抽象类的肤浅成员可以被类片实现,接口的成员必须为实现类似全部实现;
    c. 一个近乎只能继续一个架空类(类单继承),但是足以兑现多只接口;
    d. 恍如是指向目标的架空,抽象类是对类的泛,接口是本着行为之抽象
    e. 从设计角度,抽象类和接口设计之思维过程不同(相反):

接口
援类型,接口可以连续接口,类与结构可以实现接口。接口允许看修饰符
public、protected、internal、private,接口成员不容许看修饰符,默认
public
static。接口声明不可知包含数据成员,只能分包 属性、方法、事件、索引。
类 A 实现接口 IA,将类 A 的目标引用转换为接口 IA 的援:

  • 强制类型转换:IA ia = (IA)objA;但是若类 A 未实现接口
    IA,则弃来十分。
  • as 运算符:IA ia = objA as IA;若类 A 未兑现接口 IA,返回
    null、不弃来大。

实现接口的类似可打其的基类继承实现代码。类实现 2 单接口,2
单接口包含同名方法,类的纯粹实现即足以满足 2 个接口 或
显式实现每一个接口。同时可分级取各国一个接口的独自引用。
图片 1

  • 接口正常实现:接口方法无含有实现代码,实现在看似级别之法门中;
  • 接口显式实现:接口方法包含实现代码,没有看似级别之道;

流动:接口的显式实现成员只能被相应的接口引用访问,需要强制转换操作。

  1. 密封类 – 抽象类 – 静态类
    a. 密封类:sealed,只能于当独立的好像,不能够为连续,可实例化; 
    b. 抽象类:abstract,只能为持续,不可实例化;
    c. 静态类:static,静态类是封的。不能够让接续,不可实例化;
  2. 装箱 – 拆箱
    a. 装箱:隐式转换,把值类型打包到Object引用类型的一个实例中;
    b. 拆箱:显式转换,从目标吃取值类型;
    implicitexplicitisas

[1]. implicit – 隐式转换,explicit – 显式转换;

public static implicit/explicit operator 目标项目(源类型 源类型变量)
流淌:用户从定义转换仅对于类和组织。is-as
不可知用于用户从定义转换。is-as 不克重载。 

[2]. is:检查对象类型兼容性并判断是否打响转移,返回bool,不丢来很;

  • 适应范围:引用转换、装箱转换、拆箱转换,if(obj is Type) Type t =
    (Type)obj; 

[3]. as:类似强制转换,检查对象类型兼容性并回转换结果,不遏来十分,失败时返回null;

  • 适于范围:引用转换、装箱转换,Type t = obj as Type; if(null !=t){…}
  • true/成功:obj 是 Type 类型或者 obj 是 Type 类型的子类型;

对 is,CLR 对目标类型检查了点儿糟糕:is操作首先检查obj是否以及Type类型兼容。若兼容,在if语句内执行转换时CLR再检查obj是否为一个Type引用并转移。对于
as,CLR 对目标类型检查了一致差:as操作检查兼容性并一直换,效率高、性能好。
参考:is – as
详解;

  1. object sender – EventArgs e
    a. object sender:保存触发事件的目标的援,指向发送通知的对象;
    b. EventArgs e:EventArgs
    是包含事件数量的类似的基类,在事变触发时传递数据,但是 EventArgs
    不含有其他数,所有的轩然大波参数近似都须于 EventArgs 类派生;
  2. 变体
    变体分为 协变 – 抗变
    两种,针对援类型:
    a.
    协变:covariance,父=子,out,只能当作方法的返回值或性质get的访问器;
    b. 抗变:contravariance,子=父,in,只能当作方法的参数;
  3. 可空类型 ? – 空接合运算符 ??
    a.
    可空类型允许创建普通值类型的变量并标明该行之有效。可空类型是对寻常值类型的
    private 封装,与普通值类型可以互相转换。 Type
    ?
    nullableType; 其问号语法是透过 System.Nullable<T>
    利用泛型实现,? 是System.Nullable<T>的缩写。不能够创造引用类型的可空类型。2独就念属性:
    -**HasValue:bool 类型,标识是否行得通;  **Value:变量值;(普通值类型的值、可空类型的价值、null)
    b. 空接合运算符允许以可空类型的变量为 null
    时返回一个为定值。单元运算符,左右两止数据类型必须一致或会隐藏转换。首先检测左边的价,若为Null,则通表达式取值为右的价值,否则也左的价。 

  4. string str = null; Console.Write(str ??
    “abc”); 将输出:”abc”

  5. string str = “s”; Console.Write(str ?? “abc”);
    将输出:”s”

  6. 泛型
    花色是实例对象的沙盘,泛型类型是路的模版。
    列参数的封锁用 where 子句列出:where 参数:constraint, constraint, …

  7. 构造函数约束 new() 必须放在最后;

  8. 主约束(class/struct)至多一个,且务必在第一个; 
  9. 接口约束好生多独;

只是生 Type 类型或派生于 Type 类型的实参才会用来为拘束的参数。

  1. 字符串

平整字符串:在双引号中之零个或多只字符组成,并且只是含蓄简单转义字符序列。(”str”)

逐字字符串:由 @
字符后和普通的对唤起号字符串。(@”str”)

  • 将 \
    当作 普通字符 处理、而休转义字符,但片有效性(@”xxx\abc” +
    “\\”);
  • 可任意换行(常用来SQL字符串),但是换行符、缩进、空格都算以字符串长度之内;
  • 当str中,用简单独连续的英文双引号表示一个英文双引号(注意是必须在str中);

注:C#中Environment.NewLine代表为当前条件定义之换行字符串(非Unix平台为字符串“\r\n”,Unix平台为字符串“\n”),推荐应用。 

IsNullOrEmpty:判断字符串是否为null或者string.Empty;

IsNullOrWhiteSpace:判断字符串是否也null、空(string.Empty)还是只是由空白字符组成;

率先,确认string.Empty为空字符串,即string.Empty =
“”;对于”
“、”\t”这样的就由空白字符组成的字符串,IsNullOrWhiteSpace可以直接判断,而IsNullOrEmpty需要str.Trim().Length搭配以。

委托 – 事件

 a. 委托 delegate:对函数的包,一种植引用方法的类型
(引用类型),代表一致像样方式,具有同等参数列表和归路;
 b. 事件
event:委托的如出一辙种特殊情形,事件之档次是寄,事件是寄项目的变量,事件不是种类,事件是成员(变量)且为隐式自动开化为null;
  以”+=”增加委托的实例/静态方法,利用”-=”移除委托的实例/静态方法。事件被触发时,执行为信托的方(调用委托来挨家挨户调用调用列表中之道)。此处引用大话设计模式中的例子:
  public delegate void CatShoutEventHandler(object sender, EventArgs
e);
  public event CatShoutEventHandler CatShout;
寄是面向对象、类型安全之同时是可靠受控、安全之。当委托给调用时,它调用有序方法列表中之诸一个计。委托是稳定的,委托对象为创造后就是无会见另行为转。调用空委托会抛来很,通过将信托以及null比较判断委托的调用列表是否也空,进而判断委托是否也null。
泛型委托
  public delegate TR
FunHandler<T1, T2, TR>(T1 p1, T2 p2)
匿名方式 -> Lambda表达式
匿名方式,anonymous
method,可以避免创建以独立的签方法,允许以创立并初始化委托或为委托增加方法时带有小段的内联inline代码。
 
delegate(参数列表){语句块};
Lambda表达式避免冗余信息、简化匿名方式的语法。
总结: 从今 委托事件 到
观察者模式;  

 

扩展方法

允许向现有项目”添加”方法,而随便需创建新的派生类型、重新编译或坐另外方法修改原始类型。类A需要新增一个计,但类A是封的要么源代码不可见,即无克修改类A,此时扩张方法允许以任何一个类B中使用类A的公有可用成员贯彻类A需要新增的办法。

  • 推而广之方法必须是静态的,所在类也须是静态的;
  • 吃扩张项目必须作为第一单参数,必须用 this 修饰; 

    public static class ExtendMyClass {
       public static 返回路 Function(this MyClass mc) {
          // 调用MyClass的公物成员贯彻新增方法
       }
     }

调用:mc.Function();,如果无this,只能以ExtendMyClass.Function(mc);方式调用。
扩张方法还好整合泛型类,允许以(扩展)类吃之静态方法关联到不同的泛型类及。扩展接口时,利用扩展方法比较持续接口(会强制要求兑现接口下的装有方)更利于。但是,扩展方法的预先级总是比为扩张类型我吃定义之同名实例方法没有,且被扩大类型的子类不克延续其父类型的恢宏方法。

  • 以静态方法转成扩展方法,扩展方法本质上是静态方法;
  • 编制帮助类似;
  • 也 Linq 服务,实现链式编程;

参考:提扩展方法的掌握;
C#扩大方法;
奇思妙想之扩大方法层层;

 

反射

[1]. 类Assembly中Load, LoadFrom, LoadFile方法较

  • http://www.cnblogs.com/liuzhendong/archive/2011/08/15/2139506.html
  • http://www.cnblogs.com/xuqingfeng/archive/2012/05/22/assembly-load-loadfrom-loadfile-details.html

 

枚举 ~ 枚举数 ~
可枚举类型

枚举
enum,值类型,成员是整数值常量,可以显式为夫赋值初始化,但切莫克采用修饰符。枚举可用于实现各项标志,注意补加
[Flags] 特性。
而枚举类型是实现了GetEnumerator()方法的类别,返回用于(读取并回)集合中数据项之枚举数,枚举数是可以依次返回集合中多少项的切近对象。
参考:迭代器学习系列;由定义类实现foreach;
[-1-]. IEnumerable / IEnumerator
非泛型枚举数和可枚举类型,枚举数类通常声明也接近吃的镶嵌套类。
· IEnumerator
Current:当前职对应的数目项;
MoveNext():下换职,初始位置也-1;
Reset():复位;
· IEnumerable
IEnumerator GetEnumerator(): 
[-2-]. IEnumerable<T> /
IEnumerator<T>
泛型枚举数和可枚举类型,类型安全。
总结:IEnumerable / IEnumerator
学习 – sqh

关键字/修饰符/运算符

  1. object 类
     C#遭受负有的类(型)都一直/间接接轨自System.Object类(型),值类型数据可以隐式转换为Object类型;object是援类型,关键字object就是System.Object的别称。
    ■ 静态方法
     [1]. public static bool Equals(object objA, object objB){}
       调用实例方法Equals(object obj),判断是否等于;
     [2]. public static bool ReferenceEquals(object objA, object
    objB){}
       判断两单对象是不是引用相等;
    ■ 实例方法
     [1]. public virtual bool Equals(object obj){}
       方法要再写用于落实基于值来判断目标是不是等于;
     [2]. public virtual int GetHashCode(){}:获取对象的Hash值;
     [3]. public Type GetType(){}
       获取当前实例的Type,查询对象的首家数据来规定目标的周转时路;
     [4]. public virtual string ToString(){}:获取当前实例的字符串信息,对象的字符串表达形式;
    ■ 于保障方法
     [1]. protected virtual void Finalize(){}
       类或派生类可以拜,允许 Object 在“垃圾回收”机制回收 Object
    之前尝释放资源并施行外清理操作;
     [2]. protected object
    MemberwiseClone(){}:创建当前实例的外表副本;
  2. partial
     a. 将看似定义在多独代码文件中;
     b.
    用于创造有办法(定义声明和章程实现),不能够起看修饰符,返回值必须为
    void;
  3. internal
    类及类似成员的顾修饰符,同一程序集权限。类默认是 internal,类成员默认是
    private。
    protected internal:受保障的里边成员,同一程序集 or 子类权限。
    参考:internal –
    举例参考
    镶套类:嵌套是指类声明的职,而无是近似实例的岗位。
    镶套类具有成员访问级别,默认 private,可见性具体地:
    ·  嵌套类型的积极分子对查封类型的成员有完全看权限;
    ·
     封闭类型的成员只能看嵌套类型的public和internal成员,不可知顾private和protected成员;
     嵌套类型的靶子看封闭类型,需要保护封闭类型的援。
  4. using
     a. using 指令:命名空间指示符
     b. using 别名:类型别名指示符
      一个.cs文件引用了点滴单不等之命名空间,但简单独空中还席卷一个如出一辙名字的项目,使用别名更精简。
      using aClass = NameSpaceA.MyClass;
      using bClass = NameSpaceB.MyClass;
     c. using语句:资源的包装和治本 -> 隐式的 try…finally 块
      定义一个克,在限结束时自动处理目标,自动调用这个近乎实例的 Dispose
    方法。资源大凡一个贯彻 System.IDisposable 接口的切近还是组织。
  5. 异常:try…catch…finally
    结构化异常处理语法,标记出能够处理非常的代码和指令:
      ■  try:包含可能会见废弃来异常的代码;
      ■  catch:抛来十分后如若实行的代码,catch块可基本上只;
      ■  finally:始终一定会履行的代码,释放资源;
    try 块是必须的,catch 和 finally 必须至少发生一个。所有的特别类都派生于
    System.Exception 类。
    良嵌套的处理:如果大出现在 Method2 道中,但是该 catch
    块没有匹配的那个处理程序, 系统沿着调用栈向上搜索到
    Method1,如果找到匹配的 catch 块,系统先回到栈顶 Method2 处执行其
    finally 块,然后将 Method2 由调用栈中 pop(),最后执行 Method1 的对应
    catch 块和 finally 块。

    public void Method2() public void Method1()
    { {
       try{ try{
         … Method2();
       } }
       catch{…} catch{…}
       finally{…} finally{…}
    } }

  ■  throw:显式抛出异常;
– throw
Exception;异常抛来后,异常实例可以于 catch 块捕获。
– throw;此种植只能当 catch
块内,捕获后再次另行抛出。

  1. String、StringBuffer 与
    StringBuilder
    String是字符串常量、定长,StringBuffer与StringBuilder是字符串变量、可变长、避免来额外的旋变量;StringBuffer线程安全,StringBuilder是非线程安全,三者的执行进度
    StringBuilder > StringBuffer > String。具体分详见:
    参考:String – StringBuffer –
    StringBuilder.
    string – String
    String是.NET Framework中的类,string是C#中的类,C#的string映射为.NET
    Framework的String;string是C#未遭的重大字,可以视作String或System.String的别名;
  2. const 与 readonly
    const只会以声明语句中初始化,readonly可以在宣称语句或构造函数中初始化,const是编译时常量、在内存中从未存储位置,readonly是运行时常量、在内存中发生囤积位置;const是静态的,readonly可以是静态字段也可是实例字段。
  3. typeof 与 GetType
    typeof:一长运算符, typeof(classA) 返回作为它们的参数的别样项目的
    System.Type 对象,不能够重载。
    GetType:System.Object的法, obj.GetType(); 可以调用 typeof
    运算符,对自由档次的任意对象都灵验。
  4. var
    想类型,弱化类型的概念,可代任何类型,但是 var 并无更改 C#
    强类型性质。类似object,但object是引用类型,效率比较var低。
    var
    用于地方局部变量,不克用于字段,使用时必初始化且未可知重赋类型不同的价值; 

9.Marshal.SizeOf和sizeof

参考:http://www.cnblogs.com/jxnclyk/archive/2010/06/09/1754438.html,同时考虑内存对齐的问题,特别是结构体中包含引用对象时,最好使用Marshal.SizeOf。

常用函数

  1. Convert.ToInt32 –
    int.Parse(Int32.Parse)- int.TryParse – (int)
     a. Convert.ToInt32暨int.Parse类似,Convert.ToInt32
    内部调用了int.Parse,Convert.ToInt32
    可以转移的种类比较多,int.Parse只能换数字型的字符串;
     b.
    int.TryParse与int.Parse类似,但切莫见面丢来好,返回值为bool以指示解析是否成,从而得以无去丰富异常处理代码的辛苦,out参数为换输出值;
     此四者都可说明为拿类型转换为
    int,eg:举例参考.
    流淌:所有预定义的简练类型均含有静态方法
    Parse,将字符串解析为对应的数据值。
  2. Split
     String类的放到方法,分割函数,参数可以呢单个字符、多单字符、字符串。
    参考:Split –
    常用举例参考,Split的不等重载方法.
  3. Trim
     String类的置方法,用于去字符串前后的指定字符,另外还有TrimStart()和TrimEnd()方法。
    参考:Trim –
    举例参考.
  4. DateTime
    · 与字符串string的换
     DateTime.Parse(timeString);
     Convert.ToDateTime(timeString);
     if
    (DateTime.TryParse(timeString, out datetime)) {
         DateTime dm = datetime;
       }
    · DateTime

x. xxx、

 

集合类数码存储和找

取名空间:using
System.Collections;
     using System.Collections.Generic;
以及 ArrayList 对应之泛型集合是
List,与 HashTable 对应的泛型集合是
Dictionary。
ArrayList:是Array的错综复杂版本,动态数组,实现了ICollection和IList接口,针对任意档次、任意长度,非类安全型的;
声明: ArrayList mAList = new ArrayList();
切切实实地属性方法类似List,此处不再赘述。 
HashTable:每个元素还是一个仓储在DictionaryEntry对象被之键值对。keyvalue键值对都为object类型,支持其他项目的keyvalue键值对,非类安全型的;线程安全之;
声明: Hashtable ht = new Hashtable();
遍历哈希表元素:
foreach(DictionaryEntry de in ht)
哈希表排序:
 ArrayList KeysAList = new ArrayList(ht.Keys);
 KeyAList.Sort();

  1. 泛型List
    声明: List<T> mList = new List<T>();
    属性方法:
     - mList.Count:对链表mList元素计数
     - mList.Add(T item):添加元素
     - mList.Insert(int pos, T item):指定位置插入元素
     - mList.AddRange(List list):链接2个List
     - mList.Contains(T
    item):测试List是否带有元素item
     - mList.Item(int idx):索引器,通过点名索引获取或安装元素
     - mList.Remove(T item):删除指定的因素
     - mList.RemoveAt(int pos):删除指定位置的元素(推荐)
     - mList.RemoveRange(int b, int n):删除从b开始的n个元素
     - mList.Clear():清空List
     - mList.Reverse():反转List
     - mList.Sort():排序List
  2. 泛型Dictionary
    在C#吃,Dictionary提供快速的依据键值的要素查找。Dictionary<[key],
    [value]>,键必须唯一且不可知吧空引用null,值若为援类型则好为空。
    声明: Dictionary<T1, T2> mDict =
    new Dictionary<T1, T2>();

性方法:
 - mDict.Count:对字典mDict元素计数
 - mDict.Add(T1 key, T2 value):添加元素(键, 值)对
 - mDict.ContainsKey(T1
key):字典是否包含键为key的元素
 - mDict.ContainsValue(T2
value):字典是否含有值吗value的要素
 - mDict.Remove(T1 key):移除键为key的素
 - mDict.Clear():清空Dict
 - 遍历字典元素
   1. By KeyValuePair
    foreach (KeyValuePair<T1, T2> kvp in
mDict) 或 foreach(var kvp in mDict)
   2. By Key
    Dictionary<T1, T2>.KeyCollection keyCol = mDict.Keys;
    foreach (T1 key in keyCol)  或  foreach(T1 key in
mDict.Keys) 
   3. By Value
    Dictionary<T1, T2>.ValueCollection valueCol =
mDict.Values;
    foreach (T2 value in valueCol)  或  foreach(T2 value in
mDict.Values)
 - mDict[key] = value:通过索引器读写键值对
 - mDict.TryGetValue(T1 key, out
value_T2):获取与指定的键相关联的价值。通过键取值,包括个别个参数,一个是设询问的键,另一个凡取得的价,注意值前面使用out关键字。
流淌:“判断键存在”和“根据键取值”两步转化为平步,键的哈希值只计算同一赖,效率高。
以下三个集合类,可以更进一步参考Stack –
Queue –
SortedList.

  1. SortedList
    System.Collections.SortedList类表示按键排序的键/值对的聚集,可以按键或索引访问,是数组和哈希表的结合。
    声明: SortedList sList = new SortedList();
    遍历排序列表元素:
     foreach(DictionaryEntry de in sList)
    泛型SortedList

  2. 堆栈 Stack
    System.Collections.Stack类表示对象的LIFO集合,处理顺序多变。
    声明: Stack st = new Stack();
    特性方法:
     - st.Peek:取栈顶元素,但不以其移除;
     - st.Push(object obj):栈顶入栈;
     - st.Pop():出栈,移除并赶回位于Stack栈顶处的目标;
    泛型Stack

  3. 队列 Queue
    System.Collections.Queue类表示对象的FIFO集合,顺序处理集合中之目标。
    声明: Queue qu = new Queue();
    性能方法:
     - qu.Peek:取队首元素,但切莫以那个移除;
     - qu.Enqueue(object obj):队尾入队;
     - qu.Dequeue():出队,移除并赶回位于Queue初步处于的靶子;
    泛型Queue

会合与大多线程

当起多单线程并发访问集合时,应该为此System.Collections.Concurrent命名空间代替上述命名空间受到之对应品种,线程安全的集合类可由多独线程同时做客:

  • ConcurrentDictionary
  • ConcurrentQueue
  • ConcurrentBag

有关集合类的事无巨细内容参见:http://www.cnblogs.com/wjcx-sqh/p/6049314.html

参考

[1].
经典.Net面试题;
[2]. .Net面试题系列
0-9;

运技术

有关循环和try{}..catch{}的嵌套使用

foreach(var item in items)
{
    try
    {
        try{}
        catch(Exception ex)
        {
            Logger.LogInfo(null, "xxx 执行异常或失败");
            throw; // 将异常抛到外层
        }

    }
    catch(Exception ex)
    {
        Logger.LogError(null, "[{0}] 处理异常!" + ex.Message, item);
        continue; // or break; or return false; 视情况而定
    }
}

文本还命名方式

  • Copy + Delete
  • File.Move(srcFileName,
    destFileName);
  • FileInfo.MoveTo(destFileName);
  • vb.net中My.Computer.FileSystem.RenameFile()

    Computer MyComputer = new Computer();
    MyComputer.FileSystem.RenameFile(FilePath, newFileName); 

长引用:Microsoft.VisualBasic.dll,再添加using
Microsoft.VisualBasic.Devices;

文件查找

// 查找方法1
DirectoryInfo Dir = new DirectoryInfo(directory);
FileInfo[] files = Dir.GetFiles(DateTime.Now.ToString("yyyyMMdd") + "*.xml");
// 查找方法2
string[] files = Directory.GetFiles(directory, DateTime.Now.ToString("yyyyMMdd") + "*.xml");

ADO.Net 与
ASP.Net

ADO.Net 是用以与数据库进行互的面向对象类库,主要干:

  • SqlConnection类:连接和保管数据库链接
  • SqlCommand对象:发出针对数据库的SQL指令(增删改查)
  • SqlDataSet对象:数据在内存中的表示形式
  • SqlDataReader类:从数据库读取只进流的数码记录
  • SqlDataAdapter类:填充(fill)DataSet对象
  • SqlTransaction对象:数据库事务

ASP.Net
是.Net技术框架下之B/S(网页方向)框架技术,作为同样种植创建动态Web页的兵不血刃的劳务器端技术,主要涉嫌:

  • Request对象(HttpRequest类):Page对象的积极分子有,封装客户端的请信息
  • Response对象(HttpResponse类):Page对象的成员有,封装HTTP信息、响应客户浏览的网页
  • Cookie对象:记录客户端属性信息,存放于客户端,实现状态管理

在意,ASP.Net 不是一样种植语言。

 

相关文章

网站地图xml地图