Можно ли унаследовать от SPWeb?

Можно ли наследовать от классов SharePoint, таких как: SPWeb, SPList и т. Д., Или эти классы запечатаны? Я не мог найти правильный ответ.

Крис


Спасибо за ответы. Рич, ты прав - конструкторы внутренние. Значит, я не могу расширить функциональность этих классов каким-либо образом?

5 ответов

Согласно Reflector, 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" не имеет конструкторов

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

Конечно, они могут быть расширены, просто используя методы расширения - http://msdn.microsoft.com/en-us/library/bb383977.aspx

В качестве примера, который я пытаюсь немного продвинуть, вы можете взглянуть на ItemTools, ListTools или другие исходные файлы в https://github.com/kerray/NAVERTICA-SPTools

Согласно их страницам MSDN, классы не запечатаны:

SPWeb Class

SPList Class

Даже если вы можете наследовать от этих классов, я не вижу в этом смысла, поскольку вы не можете заставить SharePoint использовать их внутри себя.

Возможно, имеет смысл предоставить ваши дополнительные функции с помощью методов расширения, а не наследовать их от базовых классов.

Я думаю, что многие программисты объектной модели сервера SharePoint пришли к этой проблеме.

Сначала я просто начинаю с вспомогательного класса в качестве оболочки для SPWeb, который использует управляемую навигацию.

Поскольку требование стало более сложным, мне приходится иметь дело с более чем одним типом SPWeb. Итак, я изменил код, создав класс Factory для создания экземпляров типизированных SPSite и SPWeb. Которые связывают SPWeb с термином управляемых метаданных и сохраняют информацию о типе как в свойстве SPWeb, так и в пользовательском свойстве Term.

Я хотел бы помочь Microsoft выяснить, имеет ли этот дизайн смысл. И если Microsoft стоит начать проект с открытым исходным кодом для этого. Поскольку иногда программисты должны сосредоточиться на бизнес-логике, они не хотят снова и снова внедрять Factory, Abstract Factory.

https://social.msdn.microsoft.com/Forums/office/en-US/62c1355f-0b71-49b7-967a-648830bd6dfa/creating-a-factory-class-with-sharepoint-server-side-api-to-instantiate-a-wrapper-class-around

Другие вопросы по тегам