可选参数、命名参数、.NET的特殊类型、特性
1、可选参数和命名参数
1.1可选参数
语法:
[修饰符] 返回类型 方法名(必选参数n,可选参数n)
注意:
1.必选参数可以不存在,也可以有多个;可选参数可以有1个或多个
2.可选参数必须放在必选参数之后
3.可选参数在定义时需要赋初始值
4.可选参数之间也需要使用,进行分隔
5.调用可选参数时,不能跨参数赋值
1.2命名参数
语法:
方法名(参数1名:参数1值,...)
优势:
1.可以指定参数的名字来进行参数赋值
2.可以跨参数赋值
2、.NET的特殊类型
2.1隐式类型
关键字var:使用var声明的变量称为隐式类型变量
注意:
1.使用var,必须在声明变量时同时赋值
2.隐式类型在声明赋值之后就不能够再给它赋予一个其他类型的值
2.2匿名类型
语法:var stu=new {Name="张三",Age=18,Gender="男"};
匿名类型的创建:通过new运算符和对象初始值来创建匿名类型,不需要定义属性的类型,属性类型由属性值推断出来
匿名类型的两种用法:
1.使用var定义匿名类型变量
2.直接作为方法的参数值进行传递,典型的用途就是routes.MapRoute()方法的defalut参数
通过对象使用数据:
var stu=new {object.Name,object.Age}; 默认将所使用对象的属性名作为其属性名
注意:
匿名类型中属性的赋值是一次性的,即匿名对象的属性是只读的
2.3dynamic类型
动态类型对象:
dynamic personl=new Student{Name="张三",Age=20};
personl.Introduce();
注意:
1.调用动态类型的成员时,并不做编译时检查,而是在运行时检查;所以调用时没有快捷提示
dynamic类型是弱类型,可以直接赋任意类型的值
dynamic与var关键字的区别:
var:
1.只能用于局部变量,不能用于字段、参数
2.声明的同时必须初始化
3.变量的类型在编译时就确定了
dynamic:
1.可用于类型的字段、方法参数、方法返回值,可用于泛型类型参数等
2.可以赋值或被赋值任何类型,并不需要强制类型转换
dynamic有哪些应用场合?
dynamic动态类型的用法主要有:
1.多语言混合编程,如IronRuby和IronPython
2.简化反射的操作
3.简化COM互操作
4.处理HTML DOM对象
2.4可空类型
语法:
System.Nullable<类型> 变量名
类型?变量名
(类型指的是值类型)
作用:
1.可用类型允许变量包含未定义的值,多用于与数据库的交互中
2.可空类型就是为了解决非空类型默认值的问题
注意:
当把一个可空类型赋给一个非空类型时,将引发编译错误
以下属性可配合可空类型解决问题:
1.DBnull.Value:表示数据库的null值
案例:int? Age user.Age=reader["Age"]!=DBnull.Value?(int?)reader["Age"]:null;
2.HasValue:属于bool类型,当变量包含非空值时,它被设置为true
3.Value:类型与其对应的值类型相同,如何HasValue为true,则说明Value包含有意义的值。如果HasValue为false,则访问Value将引发InvalidOperaionException异常
使用"??"运算符分配默认值:
int? num=null;
int num2=num??0;
"??"运算符会首先判断左操作数是否为null,如果为null则返回"??"右面给出的默认值,否则返回左操作数
3、特性
语法:[特性名] 或[特姓名(参数值...)]
C#中的特性主要的特点:
1.为目标元素(可以是程序集、类、属性、方法等)加入附加信息,类似于注释
2.特性本质上也是一个类,直接或间接地继承自Attribute类
注意:
1.特性命名都以Attribute结尾,使用时可以省略,.NET会自动找到对应的特性类
2.同一目标元素可以使用多个
3.特性名必须放在[]之间,()之间的参数由特性类的构造函数确定
1.特性用于方法
ObsoleteAttribute:它用于标记一个不再使用的程序元素
[Obsolete("不要使用旧的方法,请使用新的方法",false)]
第1个参数是string类型的文字说明,解释。
第2个参数是告诉编译器是否把使用这个方法视为一种错误,如果值为true,编译时会提示错误;如果为false,程序不会报错,但编译器会产生一个警告
Obsolete特性就是ObsoleteAttribute类,继承自 Attribute类,它包含构造函数,也包含属性成员,根据Obsolete特性的定义,在使用它时可以有多种语法形式:
[Obsolete]和[Obsolete("不要使用旧的方法,请使用新的方法",false)]
[Obsolete]和[Obsolete()]是等价的
2.特性应用到类上:
[Serializable]:表示支持序列化
序列化,主要是将对象的状态信息转换为可以存储或传输的形式
3.特性应用到程序集上
在所有.NET项目中都包含应用到程序集上的特性,它们出现在所有的项目中的"Properties\AssemblyInfo.cs"文件夹中
AssemblyTitle:表示程序集的标题
AssemblyDescription:用来描述程序集信息
AssemblyCompany:用来定义公司
AssemblyProduct:用来定义产品
AssemblyCopyright:用来声明版本
GuidL:用来定义程序集唯一的编号
AssemblyVersion:定义程序集的版本
是不是一个目标元素(类、属性)只能有一个特性?
不一定,C#中的目标元素可以有多个特性
可选参数、命名参数、.NET的特殊类型、特性的更多相关文章
- C# 可选参数 命名参数
1.可选参数 可选参数是.NET4中新添加的功能,应用可选参数的方法在被调用的时可以选择性的添加需要的参数,而不需要的参数由参数默认值取代. class Program { /// <summa ...
- Dart 知识点:位置参数(必选)、位置参数(可选)、命名参数(都是可选)
先后顺序:位置参数(必选).位置参数(可选).命名参数(都是可选) 位置参数(可选).命名参数(都是可选),不能同时使用
- mybatis3.1-[topic-18-20]-_映射文件_参数处理_单个参数&多个参数&命名参数 _POJO&Map&TO 三种方式及举例
笔记要点出错分析与总结 /**MyBatis_映射文件_参数处理_单个参数&多个参数&命名参数 * _POJO&Map&TO 三种方式及举例 _ * 单个参数 : #{ ...
- C#4.0新特性:可选参数,命名参数,Dynamic
1.可选参数 可以为方法的参数设置一个默认值,如下: class Program { static void Main(string[] args) { Show(); Show("cary ...
- c# 方法参数(传值,传引用,ref,out,params,可选参数,命名参数)
一.方法参数的类型----值类型和引用类型 当方法传递的参数是值类型时,变量的栈数据会完整地复制到目标参数中即实参和形参中的数据相同但存放在内存的不同位置.所以,在目标方法中对形参所做的更改不会 ...
- C# 4.0 新特性dynamic、可选参数、命名参数等
1.dynamic ExpandoObject熟悉js的朋友都知道js可以这么写 : 1 var t = new Object(); 2 t.Abc = ‘something’; 3 t.Valu ...
- c#中的可选参数和命名参数的使用
C#4.0之后出现了一个可选参数这个特性. class Cal { static void Main(string[] args) { test1 t = new test1(); t.Add(, ) ...
- c#方法重载,可选参数,命名参数。
其实这里没什么可说哦,c++的语法大同小异.先看一段代码. class Program { public static void Test(int a) { Console.WriteLine(&qu ...
- C#方法的六种参数,值参数、引用参数、输出参数、参数数组、命名参数、可选参数
方法的参数有六种,分别是值参数.引用参数.输出参数.参数数组.命名参数.可选参数. 值参数 值参数是方法的默认类型,通过复制实参的值到形参的方式把数据传递到方法,方法被调用时,系统作两步操作: 在栈中 ...
随机推荐
- 在Core环境下用WebRequest连接上远程的web Api 实现数据的简单CRUD(续)
这篇博客是上篇博客的续写,上篇博客用的是HttpClient取远程数据,用WebRequest提交,更新,删除数据.上篇本来想全文都用httpClient,可是当时无论如何也实现不了数据的提交,于是换 ...
- System.Data.SqlClient.SqlException (0x80131904): EXECUTE 后的事务计数指示 BEGIN 和 COMMIT 语句的数目不匹配。上一计数 = 1,当前计数 = 0。 EXECUTE 后的事务计数指示 BEGIN 和 COMMIT 语句的数目不匹配。上一计数 = 1,当前计数 = 0。
EF使用ExecuteSqlCommand(db.Database.ExecuteSqlCommand("exec proc_DeleteCaseInfo_Output @caseID&qu ...
- fir.im 持续集成技术实践
互联网时代,人人都在追求产品的快速响应.快速迭代和快速验证.不论是创业团队还是大中型企业,都在探索属于自己的敏捷开发.持续交付之道.fir.im 团队也在全面实施敏捷,并推出新持续集成服务 - flo ...
- jdbc3
- linux 下 查看是32位还是64位系统 命令
文章引自:http://zhidao.baidu.com/question/583981849.html 方法1:getconf LONG_BIT 查看 如下例子所示: 32位Linux系统显示32, ...
- 详解Google Chrome浏览器(操作篇)(下)
开篇概述 由于最近忙于公司产品的架构与研发,已经三个多月没有写博客了,收到有些朋友的来信,问为什么不及时更新博客内容呢,他们说他们正期待着某些内容.对此,非常抱歉,那么我在此也给各位朋友一些承诺,从即 ...
- Node.js入门以及第一个helloworld程序
1.概念:简单的说 Node.js 就是运行在服务端的 JavaScript.学之前需要明白Node.js是无法挑战jsp.php或者asp这种老牌网站的地位的,是永远不会出现在证券.金融这种领域的. ...
- Spring-AOP用法总结
前言 Spring AOP的实现方法很多,在项目开发中具体采用什么方式,需要按实际情况来选择,每一种的用法,有其一定的实用价值,所以本文将各种使用方法进行了具体实现.主要包括Advice的be ...
- 17、Map接口及其常用子类(Hashtable、HashMap、WeakHashMap)
17.Map接口 Map没有继承Collection接口,Map提供key到value的映射.一个Map中不能包含相同的key,每个key只能映射一个value.Map接口提供3种集合的视图,Map的 ...
- 关于JS的return false
之前真的不知道JS里的return false 还能跳出事件. 今天在修改BUG的时候,用到了这个,就去查了一下,为了加深记忆在此处做个总结. retrun true: 返回正确的处理结果. retu ...