Вопрос о необязательных параметрах C # 4.0 - PullRequest
2 голосов
/ 03 января 2011

У меня есть такая реализация:

 public interface IGenericRepository
 {
    //...
    void Update<T>(T entity, string keyPropertyName = "Id") where T : class;
    void Delete<T>(T entity, string keyPropertyName = "Id") where T : class;
    //...
}

public abstract class GenericRepositoryBase : IGenericRepository
{
    //...
    void Update<T>(T entity, string keyPropertyName = "Id") where T : class;
    void Delete<T>(T entity, string keyPropertyName = "Id") where T : class;
    //..
}

public class GenericRepository : GenericRepositoryBase
{
    //..
    public override void Update<T>(T entity, string keyPropertyName = "Id")
    {
       //..
    }

    public override void Delete<T>(T entity, string keyPropertyName = "Id")
    {
        //..
    }
    //..
}

Каждый раз, когда я задаю (жесткое кодирование) keyPropertyName = "Id", это выглядит не очень хорошо.

Может быть, кто-то имеетидея, как я могу объявить значение const string defaultKeyPropertyName = "Id" только в одном месте, а затем везде просто так использовать.

//...
void Update<T>(T entity, string keyPropertyName = defaultKeyPropertyName) where T : class;
void Delete<T>(T entity, string keyPropertyName = defaultKeyPropertyName) where T : class;
//..

или это можно сделать как-то еще?

есть идеи?

Ответы [ 3 ]

3 голосов
/ 03 января 2011

Вы можете использовать const, если хотите, и создать класс, который содержит его.C # не имеет понятия о глобальной переменной, так что это настолько близко, насколько это возможно:

public static class Defaults
{
    public const string KeyName = "Id";        
}

public abstract class GenericRepositoryBase
{
    //...
    protected abstract void Update<T>(T entity, string keyPropertyName = Defaults.KeyName) where T : class;
    protected abstract void Delete<T>(T entity, string keyPropertyName = Defaults.KeyName) where T : class;
    //..
}
1 голос
/ 03 января 2011

Значения необязательных параметров AFAIK должны быть константами, поэтому их нельзя нигде объявить.

0 голосов
/ 03 января 2011

Возможно, вы не определяете значение по умолчанию для keyPropertyName в интерфейсе, но в абстрактном классе, тогда вы можете ввести константу в абстрактном классе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...