第2章 基于三层架构搭建MVC系统
2.1 可选参数和命名参数
2.1.1 可选参数
语法:
[修饰符] 返回类型 方法名(必选参数1…必选参数n,可选参数1…可选参数n)
Static void BookList(string category,string order=”BookName”)…
2.1.2 命名参数
语法:
方法名(参数1名:参数1值…参数n名:参数n值)
2.2 .NET的特殊类型
2.2.1 隐式类型
>var I = 0;
必须在声明变量的同时进行赋值,使用var声明变量,在编译的时候根据所赋值的类型来确定变量类型。
2.2.2 匿名类型
语法:
new{属性1名:属性1值,…属性n名:属性n名}
可以将一组只读属性封装到单个对象中,而不需要定义一个类型。类型名由编译器产生,该类型不能在源代码级使用。
示例:
>var stu = new{Name=”张三”,Age=18,Gender=”男”}
2.2.3 dynamic类型
示例:
>dynamic person1 = new{Name=”张三”,Age=18}
>person1.Introduce();//不会报错,如果不存在此方法,运行时报错
在.NET4.0中,引入了新的关键字dynamic,用来定义动态类型。动态类型是相对于静态类型而言的,当调用动态类型的成员时,并不做编译时检查,而是在运行时查找,如果存在正确,否则抛出异常。
2.2.4 可空类型
语法:
>System.Nullable<类型> 变量名
或
类型? 变量名
可空类型属性:
(1)HasValue:bool,是否是空置
(2)Value:值,如果HasValue为false调用抛出InvalidOperaionException异常。
??运算符:
>int? num =null;
>int num2=num??0;
“??”运算符首先判断左操作数是否为null,如果为null则返回“??”右面的默认值,否则返回左操作数。
2.3特性
C#的特性主要有以下特点。
>为目标元素(可以是程序集、类、属性、方法等)加入附加信息,类似于注释。
>特性本质上也是一个类,直接或间接的继承自Attribute类。
>特性命名都以Attribute结尾,但是在使用它时可以省略,.NET会自动找到对应的特性类。
在.NET框架中,实现了很多默认的特性,可以在程序集、类、方法的头部使用特性,使用语法如下。
[特性名]或[特性名(参数值)]
其中,特性名必须放置在[]之间,()之间的参数由特性类的构造函数确定。
常用特性:[Obsolete],[Serializable]