初识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 是必须的;
  • 参数列表中最少必须声多美滋(Dumex)个参数;

    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 个接口 或
显式落成每一个接口。同时可以独家收获每一个接口的独门引用。
XML 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. 伊夫ntArgs e:伊夫ntArgs
    是富含事件数量的类的基类,在事件触发时传递数据,可是 伊夫ntArgs
    不包蕴其余数据,所有的轩然大波参数类都无法不从 伊夫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惠特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(参数列表){语句块};
兰姆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);
    XML,- 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地图