编写用于SharePoint扩展方法
扩展方法是一个巨大的编程结构增强执行抽象和模块化的代码段,贷款填补空白,是在非公开的API,目前如一个是SharePoint提供自己很好。 很多时候,可能有一个特殊的方法是在特定类型的理想,但它提供的选项不可用在运送空气污染指数由于密封和其他修改。 使用扩展方法,可以绕过这个限制,同时保持清洁的实现,避免深继承树引用。
扩展方法变得越来越重要时,与SharePoint的代码工作,因为大多数的对象通常的任务,将自定义的行为,就SPList类型的例子,都与修改,从而否定可能继承一个密封的访问装饰。 这是最明显时,您正在使用,模拟对象以外的(即TypeMock)某些框架需要一个密封的类和一个默认的构造函数。
相对于提供的方法定义在类的内部,推广方法就是定义一个协会,并在一个单独的静态的部分类支持类中包含构造(即它必须存在,在当前范围内命名空间)。 这种方法本身调用使用实例方法的语法,允许一些代码级熟悉结构。 虽然该方法是静态的,它可以说是只有在实例的参数定义。 从本质上讲,一个扩展方法将使注入到另一个类的方法,因此它被声明为如果它是它的一部分。
为了减少因含糊不清的方法扩展方法只由该方法的名称定义,重要的是考虑到适当的命名约定(事实上,如果签名是扩展将被忽略一样!)。 此外,在SharePoint将扩展的类型,当然受作为被微软公布的空气污染指数的变动。 因此,当空气污染指数的变化,有可能不是向后兼容的理想水平。
对于扩展方法的语法很简单(重要的是要注意到,虽然VB.NET需要扩展属性定义,C#不。C#中,但我们不得不创建一个对象的副本/返回值,所以唇上出来!)。
- Extensions 公共静态 类扩展
- (
- this Type type ) 公共静态类型为接收方( 此类型的类型)
- (
- / /让我们的东西去!
-
)
- )
你可以看到,在静态扩展类的接收方方法都有其唯一的参数与此关键字修饰符装饰,以显示类型的这种方法会延长。 所以,当编写扩展方法扩展SPList类(不带任何补充参数)例如,我们的类将是这样的:
- Extensions 公共静态 类扩展
- (
- this SPList list ) 公共静态类型为接收方( 本 SPList清单)
- (
- / /让我们的东西去!
- )
- )
但是,这不会多,所以让我们采取更加务实的例子。
在下面,我假设,在一个应用程序,SPList对象,我会要经常重新排序依次为当前实例SPListItem收集修改日期,然后取出最后5个项目。
在HarvestLastFive,值得注意的是,我首先指定类型的目标使用与SPList键入此关键字。 下面,我建立一个SPList.Items,然后使用LINQ的OrderByDescending与SPBuiltInFieldId.Modified财产相结合的方法来处理SPListItemCollection订货。 最后, 以返回了修改后的集合中的第一个5个项目。 如果你只是想重新排序(1我使用的扩展加强日常使用操作支持LINQ的收集等修饰符),你只想取出以各种声明。
- Extensions 公共静态 类扩展
- (
- this SPList typeToTarget ) 公共静态 IEnumerable的<SPListItem> HarvestLastFive( 这 SPList typeToTarget)
- (
-
尝试
- (
- SPListItemCollection收集= typeToTarget。 物品 ;
- x => x [ SPBuiltInFieldId. Modified ] ) . Take ( 5 ) ;无功finalCollection = tempCollection。OrderByDescending(x =“x [SPBuiltInFieldId。 修改 ])。 以 (5);
- 返回 finalCollection;
- )
- Exception exception ) 捕获 (异常除外)
- (
- )
- 返回null;
- )
- )
你可以看到在扩展类的成员,该HarvestLastFive方法具有不同的图标(小向下箭头),说明作为一个扩展的方法了。

在类中使用该方法对analgous该类型提供的其他方法。 例如,HarvestLastFive方法采用的形式:
- 公共静态无效 TestingExtensionMethod()
- (
- . Lists [ "My List" ] ; SPList列表= SPContext。 电流 。 网络 。 名单 [“我的名单”];
- ; VAR的收集=名单。HarvestLastFive();
- / /做你想做的!
- )
在Visual Studio中,这种方法就指出,作为与前缀(扩展)工具提示扩展方法。

这应该给你足够的扩展方法获得持续。 我将我的共同张贴扩展方法,我与SharePoint使用不久,因为这本来是一个介绍一些。































[...]这个职位,也因为人们表示,他们需要更多的可重复使用的扩展方法(比这里)的例子,到SharePoint挖。 暴君! 当我做了代码审查,到了SharePoint日历的部分,我发现这个问题上拿出一些被窃听。 当传递到SPUtility.FormatDate日期参数会期望它会在星期六,将是我在特定情况下,以及我会假设别人,是不准确的,因为它被存储在本地时间。 这可以克服使用由SPWeb.RegionalSettings.TimeZone类,提供的方法,允许适当的分析就SPWeb对象出现,以支持适当的转换。 [...]
通过共享点住房» Blog存档» Pingback 下次当使用SPUtility.FormatDate为UTC(扩展方法) - 2008年9月29日@ 上午11时17
[...] Interesante危象日亚当Buenz索夫雷为construir梅托多斯日延长段SharePoint实现。 [...]
在WSS 3.0中和苔藓Pingback:Recopilatorio日enlaces interesantes(二十二)! «激情葡萄牙拉工艺技术... - 2008年11月4号@ 上午08点51分
[...]到这是一个步骤进一步利用技术,亚当Buenz在写作有关的SharePoint扩展方法是在SPList类等一样纳入博客:[...]
Pingback的iSea(仅适用于iPod和iTouch的用户) - 2009年2月1日@ 下午12时57分
[...]方法是将通过编写扩展方法SPList对象。 这是这里描述,亚当Buenz许多感谢发布2009年10月9号,下午4点20分由纳丁Storandt提起下:贤,[...]
由SPList Pingback 没有默认URL属性-纳丁的岗位- developers.de - 2009年10月9日@ 上午07时35分