我有类似的实现:
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;
//..
或者可以以其他方式完成?
任何想法?
答案 0 :(得分:3)
如果需要,您可以使用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 :(得分:1)
AFAIK可选参数值必须是常量,因此您无法在任何地方声明它们。
答案 2 :(得分:0)
也许你没有在接口中定义keyPropertyName
的默认值,但是在抽象类中,你可以在抽象类中引入常量。