2010-10-14 3 views
1

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

Крис


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

ответ

0

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

SPWeb Class

SPList Class

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

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

0

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

+0

Интересно. Если вы посмотрите на документы MSDN для этих классов, вы можете ясно видеть, что запечатанное ключевое слово не упоминается (как и для других закрытых классов в MSDN). –

+0

@justin, это была разница между 2007 и 2010 годами, я обновил ответ –

+0

Но даже если вы переключите документацию MSDN на WSS 3.0 (которая была WSS, используемая в SharePoint 2007), они все еще не выглядят закрытыми. –

2

Согласно рефлектора, 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» имеет никаких конструкторов не определены

0

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

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

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

Я хотел бы помочь 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#62c1355f-0b71-49b7-967a-648830bd6dfa