Concepts of OOP
本文关键字:OOP of Concepts | 更新日期: 2023-09-27 17:59:50
我看到一个项目,我需要解释这个代码
public class Grades : RepositoryBase<GEN_Grades>, IGrades
{
public Grades() : this(new sCMSRepositoryContext())
{
// some code here
}
}
由于存储库基类低于
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类的构造函数解释这个语句的含义
public Grades() : this(new sCMSRepositoryContext())
我们为什么以及何时需要这个???
正如我们所知,我们使用":"运算符进行继承但不明白为什么它继承了类的对象而且sCMSDepositoryContext和Grades类都没有这样的关系(即继承)
提前感谢
这很简单。您只需在调用第一个构造函数时显式调用第二个构造函数。
想象一下:
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)中调用重要的初始化代码,并避免代码重复,这使得将来更容易测试和维护代码。