《圣殿祭司的ASP.NET4.0专家技术手册》----2-13 自动实现属性

2-13 自动实现属性

圣殿祭司的ASP.NET4.0专家技术手册
回顾C# 2.0,当时发明了部分类(Partial Class)的机制,也就是将原本一个类定义分割成几个单位,根据需求将它们分散到不同的 .cs类文件中,而在编译时,编译程序会将原本分散的部分整合成一个类。

例如有一个“ExampleClass”类,其中包含了10个Methods,通过Partial Class可以将10个方法拆成10个类文件ExampleClassFile1.cs、ExampleClassFile2.cs,一直到ExampleClassFile10.cs,而每个类文件中包含一个方法:

文件一:ExampleClassFile1.cs:

public partial class ExampleClass
{
        public void Method1()
       {
               …
       }
}

文件二:ExampleClassFile2.cs:

public partial class ExampleClass
{
        public void Method2()
        {
                …
        }
}

文件三:ExampleClassFile10.cs:

public partial class ExampleClass
{
        public void Method10()
        {
                …
        }  
}

那部分类就可以在一般情况下直接使用,详细程序可以参考PartialClassExample.aspx范例程序:

ExampleClass myExampleClass = new ExampleClass();
Response.Write(myExampleClass.Method10());
现在C# 3.0持续强化这类的功能,进一步推出了部分方法(Partial Method),在概念上与部分类是一样的,只不过它是针对单一方法进行切割,将原本单一方法分割成两个部分:①部分方法定义,②部分方法实现,再进一步将这两个部分分散到不同的.cs实体文件中。

部分方法一定要在部分类中声明,且①部分方法定义,②部分方法必须属于同一个部分类。

范例2-15 部分方法的建立与应用
在此将以部分方法实现读取Employees数据,并以GridView显示员工基本数据,步骤如下:

建立部分类文件

建立两个部分类文件PartialMethodDS1.cs及PartialMethodDS2cs。

文件一:PartialMethodDS1.cs:

请注意两点,第1个是部分方法只能用在partial class中声明,第2个是两个partial class之类名称要“完全相同”,否则会产生错误。

建立部分方法定义与实现

部分方法的定义将声明在PartialMethodDS1.cs中,实现部分将放在PartialMethodDS2.cs中,而方法的名称为getEmpData,通过它来读取员工基本数据。

文件一:PartialMethodDS1.cs的getEmpData定义:

文件二:PartialMethodDS2.cs的getEmpData实现:

程序说明
部分方法在声明上,修饰词必须使用partial关键字。

部分方法本身隐含限制就是private,不对类外部公开,如果你强加public声明,编译时会产生错误。

部分方法不可以有返回值,因此声明必须是partial void。

调用使用部分方法

部分方法的两大限制会让您感到不便,其一是隐含为private,不对外公开,但各位想想,我们在类中建立方法,目的就是要让外界可以调用,若不对外公开,则实用性何在?其二是不可以有返回值,但实际上我们常通过方法来返回string、int或DataSet等对象,不可以有返回值,使用上会限制住。故本步骤的重心在于:①打破部分方法不对外公开;②不可以有返回值的两大限制,俗话说:“有法有破、山不转路转。”解决方法为:①另外建立一个公开方法,让它以公开形式被外界调用;②既然部分方法不可以有返回值,那就传入一个对象引用当参数(传址),而从部分方法结束返回后,则这个对象就有我们需要的数据了,以下在PartialMethodDS1.cs中加入getEmployees方法:

以GridView显示员工数据

最后在PartialMethod.aspx中加入下列程序,显示员工基本数据:

protected void Page_Load(object sender, EventArgs e)
{
    gvEmployees.DataSource = new PartialMethodDS().getEmployees();
    gvEmployees.DataBind();
}

2-14-1 部分方法的用意

其实会编写部分方法并没有什么了不起,各位想想,若真的只是要读取员工基本数据,又何必使用部分方法这么不直觉、拐弯抹角的方式呢?这简直就是绕了一大圈做相同的事,所以,我们才需要了解部分方法创造的目的,以下为说明。

(1)部分方法在程序产生器(Code Generator)的情境下十分有用,因为部分方法分为定义及实现两部分,而最基本的只需要先定义,而不必实现,所以程序产生器可以先进行部分方法的定义,然后在程序中直接就调用方法定义(虽然还没实现),而这是完整的程序结构,那实际的定义可以稍后交给程序员再实现,每家公司或项目有不同的实现,例如,你的员工基本数据可能是在Access、SQL Server、Oracle、MySQL等,所以稍后再进行不同的实现是有必要的。

(2)针对上面所述,你还可以进行多方面的启发联想,假设你是架构师、PM或资深程序员,你只要负责定义方法,然后虽然实现部分程序还没写也没关系,你的程序仍可以一路上调用getEmployees()方法也没问题,那实现部分等你完成了整个程序的主干后,再交由同一个Team的资浅程序员来编写,这样是不是很有利分工呢?如果你不放心将程序从头到尾交给一个新手来写的话,这样的作法反而会比较好。

(3)同上面的概念,你在外包程序前,可以花费少许时间先将程序骨干设计好,只进行部分方法定义,而实现就是招标委托,让外包的公司或人员将部分方法实现部分完成,然后回到你手上的程序代码,至少架构上会符合你想要的,连方法名称都是当初定义好的,而不会被乱命名,故最后的程序不会偏离当初规划的精神,也不致于程序代码被乱写或架构乱弄,故质量可得到一定程度保障。

2-14-2 部分方法的特性与限制

部分方法在设计与使用上比部分类有更多的限制,倘若真有意使用部分方法的设计,对其特性与限制要特别注意。

部分方法限制只能存在以partial关键字声明的对象中,例如,partial class、struct或interface里。
不可有返回值(void),若需要有返回数据,变通方式是使用参考类型对象当成参数传入部分方法中,或者是部分方法的参数前使用ref关键字声明,但不可以是out传出参数。
部分方法隐含为private,故不会向外界公开成方法,也无法强加public声明使其改变既定的private限制。
部分方法可以使用static及unsafe修饰词。
部分方法可以使用泛型(generic)。
不能建立委托(delegate)到部分方法。
不可在部分方法上使用extern声明外部实现,因为部分方法的实现必须按照既定的方式。
本文仅用于学习和交流目的,不代表异步社区观点。非商业转载请注明作译者、出处,并保留本文的原始链接。

时间: 2024-09-09 10:20:32

《圣殿祭司的ASP.NET4.0专家技术手册》----2-13 自动实现属性的相关文章

《圣殿祭司的ASP.NET4.0专家技术手册》----1-3 ASP.NET 4.0技术概览

1-3 ASP.NET 4.0技术概览 圣殿祭司的ASP.NET4.0专家技术手册 1-3 ASP.NET 4.0技术概览ASP.NET 4.0技术概览 ASP.NET 4.0是在ASP.NET 2.0及3.5基础上,添加了一些新技术,一方面保持适当幅度创新,另一方面也保持对旧版本的兼容与延续性.例如,图表控件的内建.Silverlight 5.ASP.NET AJAX 4.0.jQuery.C# 4.0.VB 10.F#.IronPython.IronRuby.LINQ.Entity Fram

《圣殿祭司的ASP.NET4.0专家技术手册》----1-1 ASP.NET平台的三分天下

1-1 ASP.NET平台的三分天下 圣殿祭司的ASP.NET4.0专家技术手册 如果访问微软www.asp.net网站,会发现ASP.NET技术目前有3位成员:Web Form.MVC和Web Pages,如图1-1所示.它们各有不同的定位与特色,彼此的开发方式也不相同.目前,使用人数与市场占有率最高的仍是Web Form,而MVC近两年有不少技术玩家和项目采用,至于Web Pages,则是另外的Web Matrix开发工具预定的网页开发技术,它走更易于使用的开发路线. 你心里可能有疑问:"为

《圣殿祭司的ASP.NET4.0专家技术手册》---- 1-6 VS 2010 SP1安装与三个扩展管理工具

1-6 VS 2010 SP1安装与三个扩展管理工具 圣殿祭司的ASP.NET4.0专家技术手册 2011年3月,微软推出VS 2010 SP1软件补丁,里面包含许多新功能与问题修正,其中与Web开发相关新功能有: IIS 7.5 Express精简版网页服务器的支持(IIS 7.5 Express需额外下载安装): SQL Server CE 4.0的支持(SQL Server CE 4.0需额外下载安装): Razor语法支持: 可部署的依赖性支持(Deployable dependenci

《圣殿祭司的ASP.NET4.0专家技术手册》----1-2 .NET 4.0平台新功能概览

1-2 .NET 4.0平台新功能概览 圣殿祭司的ASP.NET4.0专家技术手册 .NET平台版本从1.0.1.1.2.0.3.0.3.5不断演进.最新4.0版的重要改进如下: NET Framework 4.0 Visual C# 2010 Visual Basic 2010 Visual F# 2010(或F# 2.0) 新的CLR 4.0运行时 DLR动态语言运行时(Dynamic Language Runtime) ASP.NET 4.0 ASP.NET MVC 2.0(最新版为4.0

《圣殿祭司的ASP.NET4.0专家技术手册》----2-4 DLR动态执行环境

2-4 DLR动态执行环境 圣殿祭司的ASP.NET4.0专家技术手册 在.NET 4.0平台下有3个重要动态角色:①dynamic动态类型.②IronPython与IronRuby动态语言.③DLR(Dynamic Language Runtime)动态执行环境,前两者之所以能够存在,在于DLR的创建,DLR克服了原本.NET平台无法支持动态语言的限制,在DLR基础架构的支持下,便能衍生出动态类型.动态语言的诸多应用,如图2-2所示. 微软列举DLR的好处有: 简化将动态语言移植到.NET F

《圣殿祭司的ASP.NET4.0专家技术手册》----2-3 C# 4.0静态基础融入动态能力

2-3 C# 4.0静态基础融入动态能力 圣殿祭司的ASP.NET4.0专家技术手册 在了解静态与动态语言后,大家直觉上可能会以为这是二元的对立,非黑即白,不是静态语言,就是动态语言.但您是否想过静态和动态之间是可以兼具或混合的可能性?例如,静态语言为获取动态语言优点,而融入了一些动态语言的功能,然后又保持静态语言的优势,如类型安全.优化.高效率. 是的,.NET 4.0正是以这个方向去改造,在原本C#.VB静态语言基础上,加上动态语言的一些特性与优势,这样就达到以静态为主,动态为辅之目的,让C

《圣殿祭司的ASP.NET4.0专家技术手册》----1-8 .NET 4.0内建的图表控件

1-8 .NET 4.0内建的图表控件 圣殿祭司的ASP.NET4.0专家技术手册 以往ASP.NET 3.5要使用图表控件,必须再另外下载安装,但到了.NET 4.0,图表控件已变成内建,在ASP.NET 4.0项目中就可以直接使用,如图1-17所示,省去了很多麻烦. .NET 4.0图表控件联机帮助文件: http://msdn.microsoft.com/zh-tw/library/dd456632.aspx .NET 3.5图表控件范例程序: http://goo.gl/Pz4I1 .N

《圣殿祭司的ASP.NET4.0专家技术手册》----2-1 C# 4.0语言新功能

2-1 C# 4.0语言新功能 圣殿祭司的ASP.NET4.0专家技术手册 C# 4.0新增的语言功能,除了命名实参和可选实参(VB早已支持)较为常用,其他功能几乎是从动态基础衍生出来的便利性或灵活性,新功能如下: 命名实参和可选实参(Named and Optional Arguments): Dynamic动态类型(Dynamic Type): 共变量与反变量(Covariance and Contravariance): Office可程序性支持(Office Programmabilit

《圣殿祭司的ASP.NET4.0专家技术手册》----1-15 将ASP.NET程序开发服务器Port固定的技巧

1-15 将ASP.NET程序开发服务器Port固定的技巧 圣殿祭司的ASP.NET4.0专家技术手册 如果项目以"文件系统"建立,则网页执行时会使用Visual Studio内建的"ASP.NET程序开发服务器",这样便解决了操作系统无IIS服务器的困扰,但有的人问:"能否将Port固定下来?"因为变动的Port,有时要以完整路径引用参考目录下的照片或CSS设置就会产生困扰(如/Images/Pic01.jpg或/Css/WebSite.css