OOP的概念

时间:2014-04-23 10:54:13

标签: c# oop asp.net-mvc-4 inheritance

我看到了一个项目,我需要解释这段代码

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也没有这种关系(即继承)

提前致谢

1 个答案:

答案 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)中调用重要的初始化代码,避免代码重复,这样可以在将来更轻松地测试和维护代码。