1、 可选参数(即:默认参数)
2、 命名参数
3、 隐式类型
4、 匿名类型
5、 dynamic类型(即:动态类型)
6、 可空类型
7、 特性
可选参数又称默认参数 ,指在定义方法时给参数赋予默认值,要求默认参数必须出现在参数列表的后边,不能出现在参数列表的前面或者中间。
语法:[修饰符] 返回类型 方法名(参数1…参数n,可选参数1…可选参数n)
例如:
static void BookList(string category, string order = "BookName", int pageIndex = 1){ }
static void Main(string[] args)
{
BookList("C#");//使用全部默认参数
BookList("C#", "PublishTime");//使用1个默认参数
BookList("Java", "PublishTime", 2);//不使用默认参数
}
命名参数:指在调用方法时指定参数名称 ,可以互换参数的顺序
语法:方法名(参数1名:参数1值…参数n名:参数n值)
特点:参数1并不一定是方法定义中的第1个参数
例如:ASP.NET MVC中默认的代码
MVC中默认的路由注册的代码,
routes.MapRoute(
name: "Default",
url: "{controller}/{action}",
defaults: new {controller="Home", action = "Index",
id = UrlParameter.Optional }
);
隐式类型:隐式类型是一种语法糖,编译器推断类型。在定义变量时必须同时进行初始化值。
语法:var 变量名 = 变量值
例如:
var str="hello";
for(var x=1;x<10;x++){...}
foreach(var item in list){...}
匿名类型:创建匿名类型对象,不需预定义类型 。不需要指定类型的名称,不需指定属性类型
语法:new{属性1名:属性1值,…属性n名:属性n值}
例如:
var stu=new {Name="张三",Age=18,Gender="男"};
var book= new{b.Name, b.Price) ;//b 为预定义的Book 对象
dynamic类型:dynamic类型在运行时做类型检查 ,编译时不进行语法检查。可用于变量类型、方法参数和返回值类型 。定义后可以改变变量的数据类型,而隐式类型就不行。
例如:
dynamic person = new Student { Name = "张三", Age = 20 };
dynamic ViewBag{get ;set;}
其中,.NET 的MVC中的ViewBag 对象就是 dynamic 类型
可空类型:可空类型允许值类型设置空置 。作用:消除默认值的影响
语法:
System.Nullable<类型> 变量名
类型? 变量名
例如:
int? num = null;
int num2 = num.HasValue ? num.Value : 0;
num2=num??0 ;
特性:特性类似于Java中的注解 ,继承自Attribute的特殊类型。可用于方法、类和程序集
例如:
[Obsolete("不要使用旧的方法, 请使用新的方法", false)]
static void Old(){ }
[Serializable]
class Book{ }
[assembly: AssemblyCopyright("Copyright © 2013")]
指出下面代码中的错误:
练习1、
void Study( String subject = "ASP.NET MVC",String timeForm = "1:30", String timeTo ) {}
练习2、
static void Introduce(string name, int age = 18) { }
static void Main()
{
Introduce(name: "张三");
Introduce(age: 20, name: "张三");
Introduce(18, name: "张三");
}
练习3、
int[] arr1 = new[] { 0, 1, 2 };
var arr2;
arr2 = arr1;
练习4、
var stu = new { Name = "张三", Age = 18};
int age = stu.Age;
stu.Age = age;
练习5、
int? num1 = 2;
int num2 = num1;
num1 = null;
num2 = num1 ?? 0;
练习6、
public class Person
{
public string Name { get; set; }
}
static void Main()
{
dynamic person = null;
person = new Person { Name = "张三" };
person.Name = "李四";
person.Age = 20;
}
练习7、
特性有什么作用? 特性可以用到什么地方?
参考答案:
1、参数顺序错误
2、第三句话缺少命名
3、未初始化
4、只读
5、不能赋值可空类型
6、运行时错误