是否可以继承SharePoint类,如:SPWeb,SPList等。 或者这些类是密封的?我找不到正确的答案。是否可以从SPWeb继承?
克里斯
感谢回信。 富有,你是对的 - 构造函数是内部的。所以这意味着我不会以任何优雅的方式扩展这些类的功能?
是否可以继承SharePoint类,如:SPWeb,SPList等。 或者这些类是密封的?我找不到正确的答案。是否可以从SPWeb继承?
克里斯
感谢回信。 富有,你是对的 - 构造函数是内部的。所以这意味着我不会以任何优雅的方式扩展这些类的功能?
根据自己的MSDN页面,类不是密封:
即使你可能能够从这些类继承,我不明白这一点,因为您不能强制SharePoint在内部使用它们。
通过扩展方法提供添加的功能可能更有意义,而不是实际从基类继承。
的SPWeb和SPList密封在SharePoint 2007,请参阅:http://blogs.msdn.com/b/francischeung/archive/2008/08/22/unit-testing-sharepoint-2007-applications.aspx
但他们不是在SharePoint 2010封,请参阅:http://my.safaribooksonline.com/9781435456457/365
根据反射器,的SPWeb没有在任一2007或2010密封。
2007:
[SharePointPermission(SecurityAction.LinkDemand, ObjectModel=true),
SharePointPermission(SecurityAction.LinkDemand, ObjectModel=true),
SharePointPermission(SecurityAction.LinkDemand, ObjectModel=true),
SharePointPermission(SecurityAction.InheritanceDemand, ObjectModel=true)]
public class SPWeb : IDisposable, ISecurableObject
2010:
[SubsetCallableType,
ClientCallableType(Name="Web", ServerTypeId="{A489ADD2-5D3A-4de8-9445-49259462DCEB}", FactoryType=typeof(SPObjectFactory), ObjectIdentityPropertyName="CanonicalId"),
SharePointPermission(SecurityAction.InheritanceDemand, ObjectModel=true),
SharePointPermission(SecurityAction.LinkDemand, ObjectModel=true),
SharePointPermission(SecurityAction.LinkDemand, ObjectModel=true),
SharePointPermission(SecurityAction.LinkDemand, ObjectModel=true)]
public class SPWeb : SPSecurableObject, IDisposable
然而,在这两个版本中,类只具有内部构造,因此,尽管Visual Studio将让你尝试从类继承,它不会编译:
类型“Microsoft.SharePoint程序.SPWeb” 没有构造定义
当然它们可以被扩展,简单地使用扩展方法 - http://msdn.microsoft.com/en-us/library/bb383977.aspx
为例e我想推一下,你可以看看ItemTools或者ListTools或者其他源文件https://github.com/kerray/NAVERTICA-SPTools
我觉得很多SharePoint服务器对象模型程序员都遇到过这个问题。
起初,我只是从辅助类开始,将其作为SPWeb的包装器,它使用托管导航。
随着要求变得更加复杂,我必须处理多种类型的SPWeb。所以,我重写了代码,创建了一个Factory类来实例化SPSite和SPWeb。它将带有托管元数据术语的SPWeb绑定在一起,并将类型信息存储在SPWeb属性和Term定制属性中。
我想帮助微软找出这是否是一种有意义的设计。如果微软为此开启一个开源项目是值得的。由于有时程序员必须专注于业务逻辑,因此不想一次又一次地实施Factory,Abstract Factory。
有趣。如果您查看这些类的MSDN文档,您可以清楚地看到密封关键字未提及(因为它是MSDN上的其他密封类)。 – 2010-10-14 12:58:45
@justin,这是2007年和2010年之间的差异,我更新了答案 – 2010-10-14 13:00:42
但即使您将MSDN文档切换到WSS 3.0(这是SharePoint 2007中使用的WSS),它们仍然不会显示为密封。 – 2010-10-14 13:01:45