В соответствии с документацией, на которую вы ссылались, ключевое слово delegate
используется для двух целей:
- Чтобы объявить тип делегата
- Чтобы создать анонимный метод , который преобразуется в экземпляр делегата
Теперь вы можете написать весь код в анонимном методе в обычном методе, а затем использовать преобразование группы методов для созданияделегировать экземпляр, но это часто может раздражать, особенно если вы хотите использовать какие-либо локальные переменные или параметры в анонимном методе.
Так вот почему вы должны использовать анонимный метод - или что-нибудь в C # 3 и далее, вы, скорее всего, будете использовать лямбда-выражение .
Подумайте, как вам нужно создать делегата в вашем примере, если вы не используетеанонимный метод или лямбда-выражение.Вам нужно написать что-то вроде этого:
public override void FeatureDeactivating(SPFeatureReceiverProperties properties)
{
lock (this)
{
// Note: try/catch removed as it's pointless here, unless you're
// *trying* to obscure the stack trace in case of an exception
JobDeletionHelper helper = new JobDeletionHelper(properties);
// Note that we're using a method group conversion here - we're not
// invoking the method. We're creating a delegate which will invoke
// the method when the delegate is invoked.
SPSecurity.RunWithElevatedPrivileges(helper.DeleteJob);
}
}
// We need this extra class because the properties parameter is *captured*
// by the anonymous method
class JobDeletionHelper
{
private SPFeatureReceiverProperties properties;
internal JobDeletionHelper(SPFeatureReceiverProperties properties)
{
this.properties = properties;
}
public void DeleteJob()
{
// This is the code that was within the anonymous method
SPWebApplication parentWebApp = (SPWebApplication)properties.Feature.Parent;
DeleteExistingJob(JobName, parentWebApp);
}
}
Если вы спрашиваете о цели самих делегатов, это немного большая тема - но в двух словах, это возможность представлять исполняемый код какобъект, поэтому он может быть передан другому коду для выполнения.(Вы можете думать о типе делегата как об интерфейсе с одним методом, если это полезно.)