Вот несколько вещей получить Вас, начал (примерно с simplest-to-most-complex, least-to-most-powerful):
http://en.wikipedia.org/wiki/Recursive_descent_parser
http://en.wikipedia.org/wiki/Top-down_parsing
http://en.wikipedia.org/wiki/LL_parser
http://effbot.org/zone/simple-top-down-parsing.htm
http://en.wikipedia.org/wiki/Bottom-up_parsing
http://en.wikipedia.org/wiki/LR_parser
http://en.wikipedia.org/wiki/GLR_parser
, Когда я изучил этот материал, это был в длиной в семестр 400-уровневый университетский курс. Мы делали уроки, где мы сделали парсинг вручную; если Вы хотите действительно понять то, что продолжается под капотом, я рекомендовал бы тот же подход.
Это не книга, которую я использовал, но это довольно хорошо: Принципы Дизайна .
Компилятора, Надо надеяться, этого достаточно для запущения Вас:)
Я бы открыл Visual Studio, создал новый проект веб-приложения ASP.NET и щелкнул кнопку «Настроить ASP.NET» в правом верхнем углу обозревателя решений. Если вы перейдете в раздел «Безопасность», вы сможете приступить к созданию пользователей и ролей. Инструмент в основном описывает, как они работают для вас.
Вот первое место, куда я бы пошел:
http://www.asp.net/Learn/Security/
Ознакомьтесь с руководствами с 9 по 11.
Возможно, использовать статический фабричный метод для каждого производного типа? Это обычный способ создания экзотических объектов (читай: объектов с очень специфическими требованиями к инициализации) в .NET, который я оценил.
class Base
{
protected Base(int i)
{
// do stuff with i
}
}
class Derived : public Base
{
private Derived(int i)
: Base(i)
{
}
public Derived Create()
{
return new Derived(someConstantForThisDerivedType);
}
}
Вызов виртуальных методов в базовых конструкторах обычно не одобряется, так как вы никогда не можете быть уверены поведения конкретного метода и (как уже указывал кто-то другой) производные конструкторы еще не вызывались.
config ваше членство и роли могут быть похожи на это, если вы используете aspnetdb из коробки.<membership defaultProvider="IDTSqlMembershipProvider" userIsOnlineTimeWindow="15">
<providers>
<clear />
<add
name="IDTSqlMembershipProvider"
type="System.Web.Security.SqlMembershipProvider"
connectionStringName="SqlMembershipConnectionString"
applicationName="ConsumerSynergy"
enablePasswordRetrieval="false"
enablePasswordReset="true"
requiresQuestionAndAnswer="false"
requiresUniqueEmail="true"
passwordFormat="Hashed"
maxInvalidPasswordAttempts="20"
minRequiredPasswordLength="6"
minRequiredNonalphanumericCharacters="0" />
</providers>
</membership>
<roleManager enabled="true" defaultProvider="IDTSqlRoleProvider" cacheRolesInCookie="true" cookieProtection="All">
<providers>
<clear/>
<add
name="IDTSqlRoleProvider"
type="System.Web.Security.SqlRoleProvider"
connectionStringName="SqlMembershipConnectionString"
applicationName="ConsumerSynergy"/>
</providers>
</roleManager>
Мой личный фаворит о ролях.
Изучение членства, ролей и профилей ASP.NET - часть 2