文章类型: .NET
关键词: C#,语言,高级,特性,可选参数,默认参数,命名参数,隐式类型,匿名类型,dynamic类型,动态类型,可空类型,特性
内容摘要:

C#语言中的一些高级特性

2015/7/29 11:38:34    来源:apple    阅读:

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、运行时错误

↑ 上一篇文章:一个基于分页的复杂SQL查询语句(续) 关键词:复杂,SQL,查询,子查询,in,join,union 发布日期:2015/7/29 11:36:05
↓ 下一篇文章:FlashFXP(内置注册码) V5.1.0.3836 官方中文版 关键词:FlashFXP,注册码,V5.1.0.3836,官方,.. 发布日期:2015/7/29 11:47:27
相关文章:
C#中类的重要特性:继承(二) 关键词:C#,类,重要,特性,继承 发布日期:2015-07-29 10:39
C# 6.0 中的新特性 关键词:C#,6.0,新,特性 发布日期:2015-07-29 16:25
用户输入时提供一个C#语言编写的正则表达式验证类 关键词:C#语言,C#编程,正则表达式,输入验证,用户输入,验证类,自定义 发布日期:2015-07-14 16:17
相关目录:.NET软件开发ANDROID
我要评论
正在加载评论信息......