灵魂腐蚀 发表于 2015-1-16 22:24:06

ASP.NET网页编程之C# 2010定名和可选参数的新特征

在VC.net的版本上,为了让C++运行在.NETFramework中,微软为C++引进了托管,就是托管C++(ManagedC++),这个根本就没有流行起来,自托管C++产生以后就没有收到过好评。1.定名参数同意挪用者经由过程供应参数的称号来为其赋值,如许参数的地位就不在主要了。可选参数同意在界说时为某些参数赋值,在挪用时能够疏忽这些“可选的”参数。定名参数和可选参数能够使用在办法、索引器、机关函数和托付。定名参数和可选参数与dynamic范例分离在一同利用,能够便利的访诸如Office主动化API之类的COMAPI。1.1定名参数
定名参数的语法为:
参数称号1:参数值1,参数称号2:参数值2…
比方以下代码:
以下为援用的内容:
staticvoidMain(string[]args){CreateUser(password:"adminpassword",name:"admin");}staticvoidCreateUser(stringname,stringpassword){Console.WriteLine("name:{0},password:{1}",name,password);}
能够看到因为在挪用时利用了定名参数,参数的地位就不在主要了。
1.2.可选参数
办法、机关函数、索引器和托付的界说能够指定其参数为必选的仍是可选的,在挪用时必需供应必选参数,可是能够省略可选参数。
还可使用System.Runtime.InteropServices.OptionalAttribute特征类界说可选参数,该类从1.0时期就已包括在基类库中了。
每个可选参数的界说都包括默许值(默许值必需是常量),假如在挪用时没有指定该参数,则利用默许值。比方以下代码:
以下为援用的内容:
staticvoidMain(string[]args)
{
CreateUser("admin","adminpassword",50);
}
///
///创立用户
///
///用户称号
///用户暗码
///积分
///是不是锁定
staticvoidCreateUser(stringname,stringpassword,
intscore=20,boolisLocked=false)
{
Console.WriteLine("name:{0},password:{1}",name,password);
}

在一切必需参数前面界说可选参数,假如在挪用时供应了某个可选参数的值,那末必需供应该可选参数之前一切可选参数的值(假如此参数之前有可选参数),而不同意利用逗号分开的情势供应参数,即以下挪用是毛病的:
CreateUser(“admin”,“adminpassword”,,true);
而必需写成:
CreateUser(“admin”,“adminpassword”,20,true);、
大概更好的办理举措是利用定名参数:
CreateUser(“admin”,“adminpassword”,isLocked:true);
1.3.COMAPI会见
定名和可选参数与dynamic和其他加强一同使得会见COMAPI加倍便利。比方在C#3.0或更早的版本中在挪用某些COMAPI时,假如要省略某些参数必要利用Type.Missing,比方以下代码(代码系摘抄):
以下为援用的内容:
varexcelApp=newMicrosoft.Office.Interop.Excel.Application();
varmyFormat=
Microsoft.Office.Interop.Excel.XlRangeAutoFormat.xlRangeAutoFormatAccounting1;
excelApp.get_Range("A1","B4").AutoFormat(myFormat,Type.Missing,
Type.Missing,Type.Missing,Type.Missing,Type.Missing,Type.Missing);

可是有了定名和可选参数后,能够很复杂的写成如许:
以下为援用的内容:excelApp.get_Range("A1","B4").AutoFormat(Format:myFormat);2.范例等价撑持(TypeEquivalenceSupport)(此段为翻译)
假如嵌进来自于强定名托管程序集的范例信息时,可使在某一使用程序中的范例与自力的公布版本中范例坚持松懈的毗连。这意味着使用程序能够在不必要从头编译每个版本的情形下利用多个版本托管类库中的范例。
范例嵌进常常用于COM交互,比方利用MicrosoftOffice中的主动化的使用程序。嵌进范例信息同意统一个使用程序在安装了分歧的Office版本的呆板上运转。并且开辟职员能够在完整托管办理计划中利用范例嵌进。
来自于某个程序中能够嵌进的范例必要满意以下前提:
该程序集最少表露一个大众接口。
该嵌进接口利用ComImport和Guid特征声明
该程序集利用ImportedFromTypeLib和一个程序集级其余Guid特征标注(默许情形下VisualBasic和VisualC#模版已包括了程序集的Guid特征)。
在指定能够嵌进的大众接口后,能够创立完成了这些接口的类。客户端程序能够在计划时援用包括了这些大众接口的程序何而且默许EmbedInteropTypes属性为true以嵌进范例信息(在命令利用用/link编译开关能够到达不异的效果),接上去客户端能够创立这些接口的实例。假如您创立了强定名运转时程序集的新版本,客户端不必要利用新的程序集从头编译,相反,客户端程序经由过程大众接口的嵌进范例信息持续利用可用的程序集的版本。
2.1.起首创立一个强定名接口类库(依据满意前提设置属性)
以下为援用的内容:
publicinterfaceISampleInterface{voidGetUserInput();stringUserInput{get;}}
2.2.创立强定名类库,援用接口类库并界说完成以上接口的类:
以下为援用的内容:
publicclassSampleClass:ISampleInterface
{
privatestringp_UserInput;
publicstringUserInput{get{returnp_UserInput;}}
publicvoidGetUserInput()
{
Console.WriteLine("Pleaseenteravalue:");
p_UserInput=Console.ReadLine();
}
}

2.3.创立客户端使用程序,援用接口并利用反射的办法静态创立范例实行响应操纵:
以下为援用的内容:
classProgram
{
staticvoidMain(string[]args)
{
AssemblysampleAssembly=Assembly.Load("TypeEquivalenceRuntime");
ISampleInterfacesampleClass=
(ISampleInterface)sampleAssembly.CreateInstance("TypeEquivalenceRuntime.SampleClass");
sampleClass.GetUserInput();
Console.WriteLine(sampleClass.UserInput);
Console.WriteLine(sampleAssembly.GetName().Version.ToString());
Console.ReadLine();
}
}
4.修正完成了接口在的客户端类,增添新的办法并修正程序集版本号和文件版本号为2.0.0.0:
以下为援用的内容:
publicDateTimeGetDate(){returnDateTime.Now;}
5.再次实行客户端程序,察看分歧(客户端将输入新的版本号)。
在.NET全体利用托管代码创立的程序集主动会辨认更新,也就是说不必要利用分外的属性界说,间接创立接口、完成接口类库和客户端类(大概没有接口间接创立类库在客户端援用),在类库更新后复制到客户端援用的地位,客户端会主动检测到该更新,这也是.NET程序集为开辟职员带来的优点。可是利用范例等价撑持的感化表现在甚么中央,我以为仍是便利了COMAPI的会见,由于COM多是利用其他言语编写的,没有举措做到像.NET程序集那样主动感到版本变更,团体定见,希冀妙手解答。
3.总结
VisualC#中供应了静态范例、定名参数、可选参数和范例等价撑持,为编程带来便当,关于会见COMAPI来讲更便利了。并且微软屡次提到了诸如Office之类的笔墨,是否是意味着微软在不休的勉励程序员不休开辟出其于Office的一些使用,亦或是如今其于Office的使用在不休增添,仍是使用程序中与Office的交互在不休增添,经由过程加强的特征使这些事情更便利,来牢固微软件位置?一家之言,请妙手不惜见教。

无论谁倒了对双方阵营的粉丝们也是有害无益。

第二个灵魂 发表于 2015-1-17 07:46:55

弱类型造成潜在的出错可能:尽管弱数据类型的编程语言使用起来回方便一些,但相对于它所造成的出错几率是远远得不偿失的。

谁可相欹 发表于 2015-1-20 15:21:46

虽然在形式上JSP和ASP或PHP看上去很相似——都可以被内嵌在HTML代码中。但是,它的执行方式和ASP或PHP完全不同。在JSP被执行的时候,JSP文件被JSP解释器(JSPParser)转换成Servlet代码,然后Servlet代码被Java编译器编译成.class字节文件,这样就由生成的Servlet来对客户端应答。所以,JSP可以看做是Servlet的脚本语言(ScriptLanguage)版。

莫相离 发表于 2015-1-29 12:13:40

是目前ASP在UNIX/Linux上的应用可以说几乎为0)。所以平台的局限性和ASP自身的安全性限制了ASP的广泛应用。

因胸联盟 发表于 2015-2-6 00:45:32

Asp.net:首先来说,Asp.net和Asp没什么关系,看着像是升级版本什么的,其实没什么联系。Asp是脚本编程,用的是ASP语言,而ASP.net用的是C#语言,完全不同的东西。

小魔女 发表于 2015-2-14 17:28:24

是指转换后的Servlet程序代码的行数。这给调试代码带来一定困难。所以,在排除错误时,可以采取分段排除的方法(在可能出错的代码前后输出一些字符串,用字符串是否被输出来确定代码段从哪里开始出错)。

乐观 发表于 2015-3-4 08:58:47

关于ASP.NET功能上,ASP.NET比微软以前的ASP(96年出现)有更强大的library,更好的稳定性。ASP.NET可以使用.NETFramework中所有组件(也就是说.NET能实现的,ASP.NET一样能实现)。

精灵巫婆 发表于 2015-3-11 18:08:03

现在主流的网站开发语言无外乎asp、php、asp.net、jsp等。

若天明 发表于 2015-3-19 06:09:47

能产生和执行动态、交互式、高效率的站占服务器的应用程序。运用ASP可将VBscript、javascript等脚本语言嵌入到HTML中,便可快速完成网站的应用程序,无需编译,可在服务器端直接执行。容易编写。

活着的死人 发表于 2015-3-27 09:08:25

由于JSP/Servlet都是基于Java的,所以它们也有Java语言的最大优点——平台无关性,也就是所谓的“一次编写,随处运行(WORA–WriteOnce,RunAnywhere)”。除了这个优点,JSP/Servlet的效率以及安全性也是相当惊人的。
页: [1]
查看完整版本: ASP.NET网页编程之C# 2010定名和可选参数的新特征