第9章 语句
1.标签语句
①.标签语句由一个标识符后面跟着一个冒号再跟着一条语句组成
②.标签语句的执行完全如同标签不存在一样,并仅执行冒号后的语句.
③.给语句添加一个标签允许控制从代码的另一部分转移到该语句.
④.标签语句只允许用在块内部.
⑤.标签名允许与其他标识符重名,但不允许与标签名同名.
 
2.goto语句
该语句无条件转移控制到一个标签语句
 
3.using语句
eg:
eg:using语句的另一种形式
虽然这种形式也能确保对资源的使用结束后Dispose方法总是被调用,但它不能防止你在using语句已经释放了它的非托管资源之后使用该资源,把它留在一种不一致的状态,因此它提供了较少的保护,而且不推荐使用.
 
 
 
 
第10章 命名空间和程序集
1.用using给命名空间添加别名
eg:
 
这一章感觉不是很重要,所以过
 
 
 
 
第11章 异常
1.捕获异常的基本代码(可以有多个catch语句块)
try
{ }
catch (IndexOutOfRangeException e)
{ }
finally

{ }

 
2.异常类
所有异常类都派生自using System.Exception类.
 
3.throw语句
使代码显式引发一个异常.
语法:
throw ExceptionObject;
eg:
eg:不带异常对象的抛出,这种形式只能在catch语句内部.
 
 
 
 
第12章 结构
1.结构是值类型
关键字struct
结构类型的变量不能为null;
两个结构变量不能引用同一个对象;
 
2.结构的构造函数和析构函数
eg:
 
3.在结构里的字段初始化时不允许的
eg:
 
4.结构是密封的
结构总是隐式密封的,因此,结构不能被继承.
以下修饰符不能用于结构(因为无意义)
●protected
●internal
●abstract
●virtual
 
 
 
 
第13章 枚举
1.与结构一样,枚举是值类型,因此直接存储它们的数据,而不是分开存储成引用和数据.
2.枚举只有一种类型的成员:命名的整数值常量.
3.每个枚举类型都有一个底层整数类型,默认为int
eg:
eg:
 
 
 
 
第14章 数组
1.一维,矩形,交错数组
 
2.数组是对象
数组实例是从System.Array继承的对象,数组对象本身总是在堆上.
●属性Length表示返回数组长度.
●属性Rank表示返回数组维度数.
 
3.实例化和初始化一维数组或矩形数组
eg:一维的,mcArr数组是4个MyClass类引用的一维数组
eg:多维的
快捷语法:
eg:
 
4.隐式类型数组(Var)
eg:
 
5.注意
 
6.foreach
迭代变量是只读的,所以它不能被改变
虽然不能改变引用,但可以通过迭代变量改变数据.
eg:这样是错误的
eg:这样是可以的
 
7.数组协变
在某些情况下,即使某个对象不是数组的某类型,我们也可以把它赋值给数组元素,这种属性叫做数组协变.
值类型数组没有协变
eg:
 
8.数组继承的一些有用成员
 
 
 
 
第15章 委托
1.声明委托类型
●以delegate关键词开头
●没有方法主体.
eg:
 
2.创建委托对象
eg:
简洁方法:
 
3.为委托添加和移除方法
添加用+=运算符
移除用-=运算符
为委托添加和移除方法,其实是变量指向一个全新的委托,因为委托对象被创建后不会再被改变.
 
4.综合实例
eg:
eg:
 
5.匿名方法
语法:
●.delegate类型关键字
●.参数列表,如果语句块没有使用任何参数则可以忽略.
●.语句块,它包含了匿名方法的代码.
●.实现代码本身的行为必须通过返回一个在类型上与委托返回类型相同的值来匹配委托的返回类型.如果委托有void类型的返回值,则匿名方法就不能有返回值.
eg:
eg:也可以通过是圆括号为空或省略圆括号来简化匿名方法的参数列表.但是必须满足(委托的参数列表不包含out参数,匿名方法不使用任何参数.)这两个条件.
 
6.params参数
如果委托声明的参数列表包含了params参数,那么params关键字就会被匿名方法的参数列表忽略.
 
7.Lambda表达式
eg:le1到le4都等价
 
 
 
 
第16章 事件
1.声明事件
 
2.订阅事件
使用+=运算符来为事件添加事件处理程序.
使用-=运算符来移除事件处理程序.
eg:
 
3.标准事件的用法
事件使用的标准模式的根本就是System命名空间声明的EventHandler委托类型.EventHandler委托类型的声明如下面代码所示.
public delegate void EventHandler(object sender,EventArgs e);
●第一个参数用来保存触发事件的对象的引用.由于是object类型的,所以可以匹配任何类型的实例.
●第二个参数用来保存有关状态对于应用程序来说是否合适的状态信息.
●返回类型是void
 
4.EventArgs类
System.EventArgs是包含事件数据的类的基类
eg:
using System;
 
public class MyTCEventArgs : EventArgs  //继承EventArgs类,EventArgs是包含事件数据的类的基类
{
    public string Message;
    public MyTCEventArgs(string s)//构造函数
    {
        Message = s;
    }
}
 
public class MyTimerClass
{
    public event EventHandler<MyTCEventArgs> Elapsed;//泛型委托事件声明
    private void OnOneSecond(object source, EventArgs args)//发起事件的代码
    {
        if (Elapsed != null)//判断事件是否不为空
        {
            MyTCEventArgs mtcea = new MyTCEventArgs("message from ononesecond");
            Elapsed(source, mtcea);//触发事件,它有两个参数是由声明时EventHandler委托决定的,它是一个.NET BCL使用的预定义的用于标准事件的委托.所以一般都是两个参数
        }
    }
  
    private System.Timers.Timer MyprivateTimer; //私有计时器
    public MyTimerClass()//构造函数
    {
        MyprivateTimer = new System.Timers.Timer();//初始化私有计时器
        //下面语句将上面的OnOneSecond设置成了类计时器的Elapsed事件的事件处理程序.
        //它与我们上面声明的Elapsed事件完全无关.
        MyprivateTimer.Elapsed += OnOneSecond;//附加事件处理程序.
        MyprivateTimer.Interval = 1000;//每秒调用一次.
        MyprivateTimer.Enabled = true;
    }
}
 
class ClassA
{
    public void TimerHandlerA(object sourse, MyTCEventArgs args)//事件处理程序,注意两个参数
    {
        Console.WriteLine("Class A Message: {0}", args.Message);
    }
}
class Program
{
    static void Main()
    {
        ClassA ca = new ClassA();
        MyTimerClass mc = new MyTimerClass();
        mc.Elapsed += new EventHandler<MyTCEventArgs>(ca.TimerHandlerA);//注册事件处理程序
        Console.ReadKey();
    }

}

 
5.事件访问器
联想get和set访问器
 
 
 
 
第17章 接口
1.接口概念
关键字 interface
接口是表示一组函数成员而不实现成员的引用类型
 
2.声明接口
①接口声明不能包含数据成员.
②接口声明只能包含如下类型的静态成员函数的声明:
●方法
●属性
●事件
●索引
③函数成员的声明不能包含任何实习的代码
④接口的成员是隐式public,不允许有任何访问修饰符.
 
3.接口是引用类型
通过把类对象引用强制转换为接口类型来获取指向接口的引用.
eg:
using System;
 
interface IIfc1
{
    void printout(string s);
}
 
class A:IIfc1
{
    public void printout(string s)
    {
        Console.WriteLine("Calling throught From A:{0}", s);
    }
}
 
class B : IIfc1
{
    public void printout(string s)
    {
        Console.WriteLine("Calling throught From B:{0}", s);
    }
}
 
class Program
{
    static void Main()
    {
        A a = new A();
        B b = new B();
 
        a.printout("A");
        b.printout("B");
 
        IIfc1 ifc = (IIfc1)a;
        ifc.printout("interface");
 
        IIfc1 ifc2 = b as IIfc1;//使用as运算符会更好,因为as运算符转换没有实现该接口的类时,返回NULL而不会抛出异常,强制转换则会.
        ifc2.printout("inferface2");
 
        Console.ReadKey();
    }

}

 
4.实现重复成员的接口
如果一个类实现了多个接口,其中有一些接口有相同签名和返回类型的成员,那么类可以实现单个成员来满足所有包含重复成员的接口.
如果想实现不同接口中的相同成员实现不同代码,可以'显式接口成员实现'
eg:在MyClass内访问PrintOut方法则要使用((IIfc1)this).PrintOut("....");代码,因为显式接口成员实现只可以通过指向接口的引用来访问.
 
5.派生成员作为实现
实现接口的类可以从它的基类继承实现的代码.
eg:即使Derived的声明主体是空的,基类中的代码还是能满足实现接口方法的需求.
 
 
 
 
第18章 转换
1.溢出检测上下文
关键字unchecked与checked运算符
checked运算符:用于控制整型算术运算和转换的溢出检查上下文
unchecked运算符:用于禁止溢出检测
eg:unchecked与checked运算符
eg:unchecked与checked语句,用法不同,但概念与运算符一样
 
2.装箱拆箱转换
装箱:值类型转换为引用类型
拆箱:引用类型转换为值类型
装箱产生之后,有两份值——原始值类型和副本的引用类型,每个都是可以独立操作的.
eg:
 
3.用户自定义转换(之前讲过)
eg:
 
4.is运算符
该运算符用来检查转换是否会成功完成,从而避免盲目尝试转换.
is运算符只可以用于引用转换以及装箱和拆箱转换,不能用于用户自定义转换
eg:
 
5.as运算符
as运算符和强制转换运算符类似,只是它不抛出异常,如果转换失败,它返回null而不是抛出异常.
和is运算符一样,只能用于引用转换和装箱拆箱转换,不能用于用户自定义转换和值类型转换.
eg:
 
 

【C#4.0图解教程】笔记(第9章~第18章)的更多相关文章

  1. 【读书笔记】关于《精通C#(第6版)》与《C#5.0图解教程》中的一点矛盾的地方

    志铭-2020年2月8日 03:32:03 先说明,这是一个旧问题,很久很久以前大家就讨论了, 哈哈哈,而且先声明这是一个很无聊的问题,

  2. linux内核分析第3章&第18章读书笔记

    linux内核分析第3章&第18章读书笔记 第三章 进程管理 进程:处于执行期的程序(目标码存放在某种存储介质上) 包含资源:可执行程序代码,打开的文件,挂起的信号,内核内部数据,处理器状态, ...

  3. 【C#4.0图解教程】笔记(第19章~第25章)

    第19章 泛型 1.泛型概念 泛型提供了一种更准确地使用有一种以上的类型的代码的方式. 泛型允许我们声明类型参数化的代码,我们可以用不同的类型进行实例化. 泛型不是类型,而是类型的模板.   2.声明 ...

  4. 【C#4.0图解教程】笔记(第1章~第8章)

    第1章 C#和.NET框架 1..NET框架的组成 .NET框架由三部分组成(严格来说只有CLR和FCL(框架类库)两部分),如图 执行环境称为:CLR(公共语言运行库),它在运行期管理程序的执行. ...

  5. C#4.0图解教程 - 第24章 反射和特性 – 2.特性

    1.特性 定义 Attribute用来对类.属性.方法等标注额外的信息,贴一个标签(附着物) 通俗:给 类 或 类成员 贴一个标签,就像航空部为你的行李贴一个标签一样 注意,特性 是 类 和 类的成员 ...

  6. C#4.0图解教程 - 第24章 反射和特性 - 1.反射

    24.1 元数据和反射 有关程序及类型的数据被成为 元数据.他们保存在程序集中. 程序运行时,可以查看其他程序集或其本身的元数据.一个运行的程序查看本身元数据或其他程序的元数据的行为叫做 反射. 24 ...

  7. 黄聪:Microsoft Enterprise Library 5.0 系列教程(二) Cryptography Application Block (高级)

    原文:黄聪:Microsoft Enterprise Library 5.0 系列教程(二) Cryptography Application Block (高级) 本章介绍的是企业库加密应用程序模块 ...

  8. C#温故知新:《C#图解教程》读书笔记系列

    一.此书到底何方神圣? 本书是广受赞誉C#图解教程的最新版本.作者在本书中创造了一种全新的可视化叙述方式,以图文并茂的形式.朴实简洁的文字,并辅之以大量表格和代码示例,全面.直观地阐述了C#语言的各种 ...

  9. 《C#图解教程》读书笔记之五:委托和事件

    本篇已收录至<C#图解教程>读书笔记目录贴,点击访问该目录可获取更多内容. 一.委托初窥:一个拥有方法的对象 (1)本质:持有一个或多个方法的对象:委托和典型的对象不同,执行委托实际上是执 ...

随机推荐

  1. linux内存负载分析

    衡量内存负载的一个很重要的指标就是页面置换的频率.当linux系统频繁的对页进行换进换出 的时候,说明物理内存不过,不得不进行频繁的置换页面. 使用vmstat(virtual memory stat ...

  2. 2016多校第六场题解(hdu5793&hdu5794&hdu5795&hdu5800&hdu5802)

    这场就做出一道题,怎么会有窝这么辣鸡的人呢? 1001 A Boring Question(hdu 5793) 很复杂的公式,打表找的规律,最后是m^0+m^1+...+m^n,题解直接是(m^(n+ ...

  3. OpenCV学习笔记:MAT解析

    在2001年刚刚出现的时候,OpenCV基于 C 语言接口而建.为了在内存(memory)中存放图像,当时采用名为 IplImage 的C语言结构体,时至今日这仍出现在大多数的旧版教程和教学材料.但这 ...

  4. ASP.NET- 查找Repeater控件中嵌套的控件

    如何在Repeater的HeaderTemplate和FooterTemplate模板中寻找控件?在Repeater的ItemTemplate模板中的控件,我们可以用Items属性来遍历行并用Find ...

  5. matlab s变换

    A4=readdata('E:\mydata.TXT');[st,t,f] = st(A4(1:1000,2)); surf(t,f,10*log10(abs(st)),'EdgeColor','no ...

  6. Java图片上传压缩处理

    所需要的jar包在:\jdk1.7.0_25\jre\lib\rt.jar里面 package util; import java.awt.Image; import java.awt.image.B ...

  7. CF 319B Psychos in a Line 【单调队列】

    维护一个单调下降的队列. 对于每一个人,只需要找到在他前面且离他最近的可以杀掉他的人即可. #include <cstdio> #include <vector> #inclu ...

  8. ThinkPHP CURD方法盘点:table方法

    table方法也属于模型类的连贯操作方法之一,主要用于指定操作的数据表. 用法 一般情况下,操作模型的时候系统能够自动识别当前对应的数据表,所以,使用table方法的情况通常是为了:切换操作的数据表: ...

  9. BZOJ 2298: [HAOI2011]problem a 动态规划

    2298: [HAOI2011]problem a Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://www.lydsy.com/JudgeOnli ...

  10. Redis的Time Event与File Event的微妙关系

    redis里设计了两类事件,一类是file event,一类是time event. 其中file event主要为网络事件而设计,而time event为一些后台事件设计. 在两类事件的管理设计上, ...