我看到了一个项目,我需要解释这段代码
public class Grades : RepositoryBase<GEN_Grades>, IGrades
{
public Grades() : this(new sCMSRepositoryContext())
{
// some code here
}
}
RepositoryBase Class位于
之下 public class sCMSRepositoryContext : IRepositoryContext
{
private const string OBJECT_CONTEXT_KEY = "sCMS.Dal.EntityModels";
public IObjectSet<T> GetObjectSet<T>()
where T : class
{
return ContextManager.GetObjectContext(OBJECT_CONTEXT_KEY).CreateObjectSet<T>();
}
/// <summary>
/// Returns the active object context
/// </summary>
public ObjectContext ObjectContext
{
get
{
return ContextManager.GetObjectContext(OBJECT_CONTEXT_KEY);
}
}
public int SaveChanges()
{
return this.ObjectContext.SaveChanges();
}
public void Terminate()
{
ContextManager.SetRepositoryContext(null, OBJECT_CONTEXT_KEY);
}
}
// and here is the irepository class
public interface IRepositoryContext
{
IObjectSet<T> GetObjectSet<T>() where T : class;
ObjectContext ObjectContext { get; }
/// <summary>
/// Save all changes to all repositories
/// </summary>
/// <returns>Integer with number of objects affected</returns>
int SaveChanges();
/// <summary>
/// Terminates the current repository context
/// </summary>
void Terminate();
}
我需要解释Grades Class上的构造函数,这个语句是什么意思
public Grades() : this(new sCMSRepositoryContext())
为什么以及何时需要这个?
我们知道我们使用&#34;:&#34;继承运算符 但没有得到为什么它继承了类的对象 sCMSRepositoryContext和Grades Class也没有这种关系(即继承)
提前致谢
答案 0 :(得分:3)
很简单。您只需在调用第一个构造函数时显式调用它。
想象一下:
public class Repository {
//FIRST CONSTRUCTOR
public Repository() : this(null) { //NULL OR SOME OTHER DEFAULT VALUE
}
//SECOND CONSTRUCTOR
public Repository(DBObject ob) {
//DRAMATICALLY IMPORTANT INTIALIZATION CODE
}
}
在某些情况下,当您班级的消费者使用简单的ctor时,保证第二个构造函数也将被调用 ,因此重要的初始化将是也执行了。
//THIS CODE WILL EXECUTE BOTH CONSTRUCTORS
Repository re = new Repository();
为什么这一切?您可以在单个函数(ctor)中调用重要的初始化代码,避免代码重复,这样可以在将来更轻松地测试和维护代码。