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的特殊类型、特性
时间: 2024-12-26 08:43:49
可选参数、命名参数、.NET的特殊类型、特性的相关文章
c# 方法参数(传值,传引用,ref,out,params,可选参数,命名参数)
一.方法参数的类型----值类型和引用类型 当方法传递的参数是值类型时,变量的栈数据会完整地复制到目标参数中即实参和形参中的数据相同但存放在内存的不同位置.所以,在目标方法中对形参所做的更改不会对调用者的初始变量产生任何影响. 当方法传递的参数是引用类型是,只是将变量的引用复制到目标参数中,实参和形参的引用指向内存中的同一位置.所以,在目标方法中对形参所做的更改会影响调用者的初始变量. 二.一些特殊的方法参数 1.引用参数---ref (使值类型的变量做方法参数时也可以传引用) 一些数据类型(
C#参数知识盘点,形/实参、值/引用传递、ref、out、in、params、可选、命名等
引言 参数,也叫参变量,是一个变量.在方法签名中随处可见,实现了不同方法间的数据传递,基本上充斥在代码的各个角落里.实参是通过方法调用传递到方法的值的名称,形参是方法期望接收的值.在方法签名或者原型中,方法名称后的括号包含方法的参数及其类型的完整列表.参数声明指定参数中存储的值的类型.大小和标识符.然而小小参数的背后其实也是有着大学问的,所以本篇博文,您可以和博主一起把C#里面各式各样的参数复习一遍.我们先简单回顾一下各种各样的参数概念,对不同类型参数的使用场景有一个了解,再慢慢深入探讨参数的传
【工作中遇到的问题】可选参数必须为引用类型、可以为 null 的类型或声明为可选参数。 参数名: parameters
今天上班来发现收到新的报错邮件,里面出现一个新的报错. “Method(Int32, Int32, Int32, Int32, Int32, Int32, System.String, System.String)”的不可以为 null 的类型“System.Int32”的参数“param”” 我这个方法本来是要传8个参数,没有的就传默认值. 现在一看报错详情,原来是异步发来的时候,请求参数没传全. 这个时候整个人傻逼了.....为神马没传默认参数.... 正想气势冲冲的找前端去理论.这时脑袋灵
c#方法重载,可选参数,命名参数。
其实这里没什么可说哦,c++的语法大同小异.先看一段代码. class Program { public static void Test(int a) { Console.WriteLine("只有一个参数a=={0}", a); } public static void Test(int a, int b = 5) { Console.WriteLine("有两个参数a=={0},b=={1}", a, b); } static void Main() { Te
(一)Python入门-5函数:06参数类型-位置参数-默认值参数-命名参数-可变参数-强制命名参数
参数的几种类型: 位置参数: 函数调用时,实参默认按位置顺序传递,需要个数和形参匹配.按位置传递的参数,称为: “位置参数” 默认值参数: 我们可以为某些参数设置默认值,这样这些参数在传递时就是可选的.称为“默认值参数”. 默认值参数放到位置参数后面. 命名参数: 我们也可以按照形参的名称传递参数,称为“命名参数”,也称“关键字参数”. 可变参数: 可变参数指的是“可变数量的参数”.分两种情况: 1. *param(一个星号),将多个参数收集到一个“元组”对象中. 2. **param(两个星号
.NET中那些所谓的新语法之一:自动属性、隐式类型、命名参数与自动初始化器
开篇:在日常的.NET开发学习中,我们往往会接触到一些较新的语法,它们相对以前的老语法相比,做了很多的改进,简化了很多繁杂的代码格式,也大大减少了我们这些菜鸟码农的代码量.但是,在开心欢乐之余,我们也不禁地对编译器内部到底为我们做了哪些事儿而感到好奇?于是,我们就借助反编译神器,去看看编译器到底做了啥事!其实本篇中很多都不算新语法,对于很多人来说可能都是接触了很久了,这里主要是针对.NET的老版本来说,是一个“相对”的新语法. /* 新语法索引 */ 1.自动属性 Auto-Implemente
Scala可变参数列表,命名参数和参数缺省
重复参数 Scala在定义函数时允许指定最后一个参数可以重复(变长参数),从而允许函数调用者使用变长参数列表来调用该函数,Scala中使用“*”来指明该参数为重复参数.例如: scala> def echo (args: String *) = | for (arg <- args) println(arg) echo: (args: String*)Unit scala> echo() scala> echo ("One") One scala> ech
ibernate学习笔记5---实体类或属性名与数据库关键字冲突、hql命名参数、hql实现通用分页
一.实体类或属性名与数据库关键字冲突问题1.实体类名与数据库中的关键字冲突比如:实体表User与oracle中的系统表冲突解决方式1:在xml中添加table属性,指定表名,使其不与name默认相等 [html] view plaincopyprint? <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hiber
C#方法的参数 Ref Out Params 4种类型的参数
转载:http://www.cnblogs.com/kissdodog/archive/2013/05/11/3072815.html 一.按值传递参数 值参数是通过将实参的值复制到形参,来实现按值传递到方法,也就是我们通常说的按值传递. 方法被调用时,CLR做如下操作: 1.在托管堆栈中为形参分配空间: 2.将实参的值复制到形参. 这个太常用了,按值传递参数,是复制一份,因此不影响原来参数的值. public class Program { static void Main(string[]