知识大全 C# 2010命名和可选参数的新特性
Posted 知
篇首语:鞭打的快马,事找的忙人。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 C# 2010命名和可选参数的新特性相关的知识,希望对你有一定的参考价值。
C# 2010命名和可选参数的新特性 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
命名参数允许调用者通过提供参数的名称来为其赋值 这样参数的位置就不在重要了 可选参数允许在定义时为某些参数赋值 在调用时可以忽略这些 可选的 参数 命名参数和可选参数可以应用在方法 索引器 构造函数和委托 命名参数和可选参数与dynamic类型结合在一起使用 可以方便的访诸如Office自动化API之类的 API
命名参数命名参数的语法为
参数名称 :参数值 参数名称 :参数值 …
例如以下代码
static void Main(string[] args)CreateUser(password: adminpassword name: admin );
static void CreateUser(string name string password)Console WriteLine( name: password: name password);
可以看到由于在调用时使用了命名参数 参数的位置就不在重要了
可选参数方法 构造函数 索引器和委托的定义可以指定其参数为必选的还是可选的 在调用时必须提供必选参数 但是可以省略可选参数
还可以使用System Runtime InteropServices OptionalAttribute特性类定义可选参数 该类从 时代就已经包含在基类库中了
每一个可选参数的定义都包含默认值(默认值必须是常量) 如果在调用时没有指定该参数 则使用默认值 例如以下代码
static void Main(string[] args)CreateUser( admin adminpassword );
///
用户名称
///用户密码
///积分
///是否锁定
static void CreateUser(string name string password int score= bool isLocked=false)Console WriteLine( name: password: name password);在所有必须参数后面定义可选参数 如果在调用时提供了某个可选参数的值 那么必须提供该可选参数之前所有可选参数的值(如果此参数之前有可选参数) 而不允许使用逗号分隔的形式提供参数 即以下调用是错误的
CreateUser( admin adminpassword true);
而必须写成
CreateUser( admin adminpassword true);
或者更好的解决办法是使用命名参数
CreateUser( admin adminpassword isLocked:true);
API访问
命名和可选参数与dynamic和其他增强一起使得访问 API更加方便 例如在C# 或更早的版本中在调用某些 API时 如果要省略某些参数需要使用Type Missing 例如以下代码(代码系摘抄)
var excelApp = new Microsoft Office Interop Excel Application();var myFormat =Microsoft Office Interop Excel XlRangeAutoFormat xlRangeAutoFormatAccounting ;
excelApp get_Range( A B ) AutoFormat(myFormat Type Missing Type Missing Type Missing Type Missing Type Missing Type Missing);
但是有了命名和可选参数后 可以很简单的写成这样
excelApp get_Range( A B ) AutoFormat( Format: myFormat );
类型等价支持(Type Equivalence Support)(此段为翻译)
如果嵌入来自于强命名托管程序集的类型信息时 可以使在某一应用程序中的类型与独立的发布版本中类型保持松散的连接 这意味着应用程序可以在不需要重新编译每一个版本的情况下使用多个版本托管类库中的类型
类型嵌入经常用于交互 例如使用Microsoft Office中的自动化的应用程序 嵌入类型信息允许同一个应用程序在安装了不同的Office版本的机器上运行 而且开发人员可以在完全托管解决方案中使用类型嵌入
来自于某个程序中可以嵌入的类型需要满足以下条件
该程序集至少暴露一个公共接口 该嵌入接口使用ComImport和Guid特性声明 该程序集使用ImportedFromTypeLib和一个程序集级别的Guid特性标注(默认情况下Visual Basic和Visual C#模版已包含了程序集的Guid特性) 在指定可以嵌入的公共接口后 可以创建实现了这些接口的类 客户端程序可以在设计时引用包含了这些公共接口的程序何并且默认Embed Interop Types属性为true以嵌入类型信息(在命令行使用/link编译开关可以达到相同的效果) 接下来客户端可以创建这些接口的实例 如果您创建了强命名运行时程序集的新版本
客户端不需要使用新的程序集重新编译 相反 客户端程序通过公共接口的嵌入类型信息继续使用可用的程序集的版本
首先创建一个强命名接口类库(根据满足条件设置属性)
[ComImport][Guid( DA A B F DF )]public interface ISampleInterfacevoid GetUserInput();string UserInput get;
创建强命名类库 引用接口类库并定义实现以上接口的类
public classSampleClass: ISampleInterfaceprivate stringp_UserInput;public stringUserInput get return p_UserInput;public voidGetUserInput()Console WriteLine( Please enter a value: );p_UserInput = Console ReadLine();
创建客户端应用程序 引用接口并使用反射的方法动态创建类型执行相应操作
class Programstatic void Main(string[] args)Assembly sampleAssembly = Assembly Load( TypeEquivalenceRuntime );ISampleInterface sampleClass =(ISampleInterface)sampleAssembly CreateInstance( TypeEquivalenceRuntime SampleClass );sampleClass GetUserInput();Console WriteLine(sampleClass UserInput);Console WriteLine(sampleAssembly GetName() Version ToString());Console ReadLine(); 修改实现了接口在的客户端类 增加新的方法并修改程序集版本号和文件版本号为public DateTime GetDate()return DateTime Now;
再次执行客户端程序 观察不同(客户端将输出新的版本号)在 NET全部使用托管代码创建的程序集自动会识别更新 也就是说不需要使用额外的属性定义 直接创建接口 实现接口类库和客户端类(或者没有接口直接创建类库在客户端引用) 在类库更新后复制到客户端引用的位置 客户端会自动检测到该更新 这也是 NET程序集为开发人员带来的好处 但是使用类型等价支持的作用体现在什么地方 我认为还是方便了 API的访问 因为可能是使用其他语言编写的 没有办法做到像 NET程序集那样自动感应版本变化 个人意见 期望高手解答
总结
cha138/Article/program/net/201311/11278相关参考
C#简单命名指南 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
C#编码规范(一)命名约定与风格 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! (C#Codin
C#实现按日期命名上传文件代码 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  
C++、Java与C#的命名规范总结 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 摘要由于在开
新手入门之VisualC#命名空间详解 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 命名空间提
C#语言规范--1.12命名空间和程序集 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 除了依赖
知识大全 详解C# 4.0中的新对象ExpandoObject
详解C#4.0中的新对象ExpandoObject 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
详解VisualC#2010几大新特征 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 一简介
在C#中既可以通过值也可以通过引用传递参数通过引用传递参数允许函数成员(方法属性索引器运算符和构造函数)更改参数的值并保持该更改若要通过引用传递参数请使用ref或out关键字为简单起见本主题的示例
在net中有一个至关重要的关键字那就是using using一般有着以下几种用法 直接引入命名空间 ausingSystem这个是最常用的就是using+命名空间这样就可以直接使用命名空间中