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类都没有这样的关系(即继承)

提前感谢

Concepts of OOP

这很简单。您只需在调用第一个构造函数时显式调用第二个构造函数。

想象一下:

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)中调用重要的初始化代码,并避免代码重复,这使得将来更容易测试和维护代码。