C语言C#/.NET 基础学习

初识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。

  • 数量成员:字段、常量;
  • 函数成员:属性、方法、事件、索引器、构造函数、析构函数、操作符;
  1. 字段 – 属性 – 索引
    字段 – private,属性 – public;
    属性
    是指定的一组2个卓殊的、称为访问器 (get 和 set)
    的法子。特性是函数成员,访问器只可以被隐式调用,执行代码,但不为数据存储分配内存。公有属性提供对民用字段的受控访问。
    索引 是一组 get 和 set
    访问器,类似属性,目录是函数成员;索引平常用于访问七个数据成员,类似数组利用索引运算符;索引不能声称为
    static。访问器只能够被隐式调用,可以重载,参数列表必须不一致。
  • 目录没有称谓,但 this 是必须的;
  • 参数列表中至少必须声美赞臣(Meadjohnson)(阿博特(Abbott))个参数;

    ReturnType this[参数列表] {

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

    }

  1. 静态构造函数 –
    (普通的)实例构造函数
    实例构造函数起先化类的每个新实例,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.数据成员/函数名
    显式访问被埋伏的积极分子。
  • 字段:名称相同,类型相同; 
  • 函数:签名相同(函数名、参数列表(个数、顺序、类型、修饰符));
  1. 虚幻类 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 个接口 或
显式完结每一个接口。同时可以分别收获每一个接口的独门引用。
C语言 1

  • 接口正常达成:接口方法不分包达成代码,完成在类级其余法子中;
  • 接口显式达成:接口方法包蕴已毕代码,没有类级其余法门;

注:接口的显式落成成员只可以被相应的接口引用访问,须求强制转换操作。

  1. 密封类 – 抽象类 – 静态类
    a. 密封类:sealed,只好被作为独立的类,无法被持续,可实例化; 
    b. 抽象类:abstract,只好被接续,不可实例化;
    c. 静态类:static,静态类是密封的。无法被一而再,不可实例化;
  2. 装箱 – 拆箱
    a. 装箱:隐式转换,把值类型打包到Object引用类型的一个实例中;
    b. 拆箱:显式转换,从目的中领到值类型;
    C语言,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. 伊夫(Eve)ntArgs e:伊夫(Eve)ntArgs
    是富含事件数量的类的基类,在事件触发时传递数据,然而 伊夫(Eve)ntArgs
    不带有其余数据,所有的风云参数类都必须从 伊芙(Eve)ntArgs 类派生;
  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,则整个表明式取值为左侧的值,否则为左边的值。 
  • string str = null; Console.Write(str ??
    “abc”); 将输出:”abc”
  • string str = “s”; Console.Write(str ?? “abc”);
    将输出:”s”
  1. 泛型
    类型是实例对象的模板,泛型类型是项目标沙盘。
    花色参数的约束用 where 子句列出:where 参数:constraint, constraint, …
  • 构造函数约束 new() 必须放在最终;
  • 主约束(class/struct)至多一个,且必须放在第四位; 
  • 接口约束可以有多个;

唯有 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”那样的仅由空白字符组成的字符串,IsNullOr惠·特(Wh·it)eSpace可以一贯判断,而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)
匿名方式 -> 拉姆da表明式
匿名方式,anonymous
method,可以防止成立使用独立的署名方法,允许在创造并起首化委托或为委托增添方法时饱含小段的内联inline代码。
 
delegate(参数列表){语句块};
兰姆(Lamb)da表明式幸免冗余音信、简化匿名方式的语法。
总结从 委托事件 到
观望者格局
;  

 

增加方法

允许向现有项目”添加”方法,而无需创制新的派生类型、重新编译或以其余艺术修改原始类型。类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方法相比

 

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

枚举
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对象:数据在内存中的象征方式
  • SqlData里德r类:从数据库读取只进流的数额记录
  • SqlDataAdapter类:填充(fill)DataSet对象
  • SqlTransaction对象:数据库事务

ASP.Net
是.Net技术框架下的B/S(网页方向)框架技术,作为一种创造动态Web页的精锐的劳动器端技术,首要涉及:

  • Request对象(HttpRequest类):Page对象的分子之一,封装客户端的伸手音讯
  • Response对象(HttpResponse类):Page对象的分子之一,封装HTTP消息、响应客户浏览的网页
  • Cookie对象:记录客户端属性新闻,存放在客户端,已毕情形管理

注意,ASP.Net 不是一种语言。