C#图解教程笔记20170720

2017-07-20  本文已影响81人  李大_C

全局程序集缓存(GAC),放进GAC的程序集称为共享程序集

当试图安装一个程序集到GAC时,CLR的安全组件首先必须检验程序集上的数字签名是否有效。如果无效,系统不会把它安装到GAC。

GAC内的并肩执行
相同文件名的不同程序集(因为他们带有不同的标识符)


image.png

配置文件
配置文件含有关于应用程序的信息,供CLR在运行时使用。
配置文件有XML代码组成,并不包含C#代码。
他们的一种用途是更新一个应用程序集以使用新版本的DLL

image.png

异常

异常是程序中的运行时错误,他违反了一个系统约束或应用程序约束,或出现了在正常操作室未预料的情形。

try语句用来知名被异常保护的代码块,并提供代码以处理异常。

当一个异常发生时,CLR:

异常对象含有只读属性,带有导致该异常的信息。


image.png

catch子句处理异常,它有三种形式,允许不同级别的处理。


image.png
image.png

为异常寻找处理代码


image.png

一般法则


处理异常的一半法则.png

结构

结构有数据成员和函数成员。关键字struct。
结构与类最重要的区别:

结构是值类型和所有值类型一样,结构类型变量含有它自己的数据。从而:

类变量赋值和结构变量赋值


image.png

结构可以有实例构造函数和静态构造函数,但不允许有析构函数。

构造函数和析构函数的总结


image.png

在结构中字段初始化是不允许的


image.png

结构是密封的(隐式密封),不能从他们派生其他结构。
不能用于结构的修饰符

结构作为返回类型和参数。
结构可以作为返回值和参数

结构就像类可以实现接口

枚举
枚举是由程序员定义的类型,与类或结构一样。

每个枚举类型都有一个底层证书类型,默认为int


image.png

数组

Rank:返回数组维度数的属性
Length:返回数组长度的属性

数组是引用类型,数组的元素可以是值类型或引用类型
一维数组


image.png

实例化数组


image.png
image.png

访问数组
使用索引值访问

显示初始化一维数组
int[] intArr = new int[] {1,2,3,4}

隐式类型数组


image.png

交错数组


image.png
成 员 类 型 生 存 期 意 义
Rank 属性 实例 获取数组的维度数
Length 属性 实例 获取数组中所有维度的元素总和
GetLength 方法 实例 返回数组的指定维度的长度
Clear 方法 静态 设置元素的范围为0或null
Sort 方法 方法 静态 在一维数组中对元素进行排序
BinarySearch 方法 静态 使用二进制搜索,搜索一维数组中的值
Clone 方法 实例 进行数组的浅复制——复制值类型数组和引用类型数组的元素
IndexOf 方法 静态 返回一维数组中遇到的第一个值
Reverse 方法 方法 静态 将一维数组中的某一范围内的元素顺序倒过来
GerUpperBound 方法 实例 获取指定维度的上限

clone方法

委托

委托包含具有相同签名和返回类型的有序方法列表

委托是引用类型,因此有引用和对象
委托类型的变量的声明:


image.png

两种创建委托对象的方式:


使用带new运算符
快捷语法 image.png

由于委托是引用类型,可以通过给他赋值来改变包含在委托变量中的引用,就得委托对象会被垃圾回收期回收

组合委托
例:第三个委托有前两个委托组合

image.png

为委托增加方法
可以通过使用+=运算符来为委托增加方法或另一个委托

image.png
反之-=从委托移除方法

调用方法

image.png
image.png

调用带返回值的委托
如果委托有返回值并且在调用列表中有一个以上的方法,会发生下面的情况:

namespace weituo
{
    delegate int MyDel();
    public class MyClass
    {
        int result = 5;
        public int Add2()
        {
            result += 2;
            return result;
        }
        public int Add3()
        {
            result += 3;
            return result;
        }
    }

    class Program
    {
        static void Main(string[] args)
        {
            MyClass mc = new MyClass();
            MyDel md = mc.Add2;
            md += mc.Add3;
            md += mc.Add2;
            Console.WriteLine(md());
            Console.ReadKey();
        }
    }
}

返回结果:
12


匿名方法
匿名方法允许我们避免使用独立的具体方法。
匿名方法是在初始化委托时内联声明的方法

命名方法
匿名方法
上图两组代码的输出结果为:
25
26

可以在如下地方使用匿名方法:

匿名方法表达式的语法包含如下组成部分:

params参数
如果委托声明的参数列表包含了params参数,那么params关键字就会被匿名方法的参数列表忽略。
变量和参数的作用域
参数以及声明在匿名方法内部的局部变量的作用域限制在实现方法的主体之内

变量和参数的作用域

匿名方法可以访问它们在外围作用域的局部变量和环境
外围作用域的变量叫做外部变量
用在匿名方法实现代码中的外部变量称为被方法捕获


在匿名方法中捕获的变量

Lambda表达式
匿名方法转换成Lambda

image.png
image.png
image.png

事件

事件就好像被简化的针对特殊用途的委托

image.png
事件是成员

触发事件

使用匿名方法和lambda表达式增加事件处理程序


image.png

eventhandler委托类型


image.png

通过扩展eventargs来传递数据


image.png

事件访问器

接口

接口是表示一组函数成员而不实现成员的引用类型。
其他类型——类和结构可以实现接口。


image.png
上一篇 下一篇

猜你喜欢

热点阅读