At low level, SharePoint manages lists based on their BaseType (0 for Generic List, 1 for Document Library etc.),
which defines the list's field set (for example, all built-in Base Types define such columns as ID, Author, Editor etc).
Base Types are encapsulated in the
SPBaseType enumeration, but it's possible to create custom BaseTypes inside a
Furthermore, there are ListTemplates (such built-in list templates as 100 for CustomList, 101 for DocumentLibrary etc). List Templates are based on BaseTypes. As far as I understand, they add more fields to that defined in the BaseType. It's also possible to create custom ListTemplate, and custom ListDefinitions. What are differences between them?
Finally, there are ContentTypes, which define a set of Site Columns. There is an option
EnableContentTypes in any list
or library, but simultaneously, every list has at least one content type, even if this options is set to false.
And also it is possible to add a field to a list without interacting somehow with it's template, definition or content type.
So, how SharePoint builds the final field set for a list or library? Does it merge fields defined in all there sources?
Could anybody please explain how all these components relate to each other, this all is a bit mixed up in my head. Thx in advance.