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。

基本功学习

6个基础命名空间

// .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;
    属性
    是点名的一组3个13分的、称为访问器 (get 和 set)
    的办法。特性是函数成员,访问器只好被隐式调用,执行代码,但不为数据存储分配内部存款和储蓄器。公有属性提供对民用字段的受控访问。
    索引 是一组 get 和 set
    访问器,类似属性,目录是函数成员;索引常常用于访问多个数据成员,类似数组利用索引运算符;索引不能声称为
    static。访问器只可以被隐式调用,能够重载,参数列表必须分化。
  • 目录没有称谓,但 this 是必须的;
  • 参数列表中最少必须声Bellamy(Bellamy)个参数;

    ReturnType this[参数列表] {

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

    }

  1. 静态构造函数 –
    (普通的)实例构造函数
    实例构造函数初阶化类的各类新实例,static
    构造函数伊始化类层次的档次。static
    构造函数无法访问类的实例成员,经常用于初始化类的静态字段,静态构造函数被系统活动调用。静态字段先于实例成员被开端化,类只可以有二个static 构造函数,不可能带参数、不能有访问修饰符、也无法应用 this 访问器。

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

[2]. 构造函数初始化器关键字:this,base,控制类中构造函数的进行种种

[3].
静态构造函数只会被执行一遍(在创立第②个实例或引用任韩博态成员此前,且由.NET自动调用)

[4].
静态构造函数在程序域(AppDomain)的层级确定保证只会执行1回,且线程安全

[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 个接口 或
显式达成每1个接口。同时能够分别取得每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,CLMurano 对指标类型检查了三回:is操作首先检查obj是还是不是和Type类型包容。若包容,在if语句内实施转换时CL酷威再检查obj是不是为2个Type引用并转移。对于
as,CLHighlander 对目的类型检查了一遍:as操作检查包容性并从来转换,功能高、品质好。
参考:is – as
详解

  1. object sender – EventArgs e
    a. object sender:保存触发事件的靶子的引用,指向发送公告的对象;
    b. 伊芙ntArgs e:伊芙ntArgs
    是带有事件数量的类的基类,在事件触发时传递数据,不过 伊夫ntArgs
    不分包其余数据,全部的轩然大波参数类都必须从 伊芙ntArgs 类派生;
  2. 变体
    变体分为 协变 – 抗变
    二种,针对引用类型:
    a.
    协变:covariance,父=子,out,只可以当做方法的再次来到值或性质get的访问器;
    b. 抗变:contravariance,子=父,in,只好当做方法的参数;
  3. 可空类型 ? – 空切合运算符 ??
    a.
    可空类型允许创造普通值类型的变量并标明其行之有效。可空类型是对普通值类型的
    private 封装,与通常值类型能够相互转换。 Type
    ?
    nullableType; 其问号语法是因此 System.Nullable<T>
    利用泛型完毕,? 是System.Nullable<T>的缩写。不能够成立引用类型的可空类型。一个只读属性:
    -**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)至多3个,且必须放在第三人; 
  • 接口约束可以有七个;

只有 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惠特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(参数列表){语句块};
Lambda表明式防止冗余消息、简化匿名格局的语法。
总结从 委托事件 到
观看者形式
;  

 

扩张方法

同意向现有项目”添加”方法,而无需创立新的派生类型、重新编写翻译或以别的办法修改原始类型。类A须求新增1个主意,但类A是密封的或源代码不可知,即无法修改类A,此时扩大方法允许在另2个类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 别称:类型小名提示符
      1个.cs文件引用了四个差异的命名空间,但五个空中都包涵三个一律名字的门类,使用外号更简短。
      using aClass = NameSpaceA.MyClass;
      using bClass = NameSpaceB.MyClass;
     c. using语句:财富的包装和保管 -> 隐式的 try…finally 块
      定义3个范围,在界定甘休时自动处理目的,自动调用那么些类实例的 Dispose
    方法。资源是3个贯彻 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关键字。
注:“判断键存在”和“依照键取值”两步转化为一步,键的哈希值只总计2遍,功用高。
以下三个集合类,能够进一步参考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 不是一种语言。

 

相关文章