不重复代码的构造函数

时间:2013-12-06 17:07:32

标签: c#

我有2个构造函数,其中有一个基本调用;

public MyApplication(myEntities context)
            :base(context)
{
    _1stApp = new 1stApplication(this._context);
    _2ndApp = new 2ndApplication(this._context);
    // etc...
}

public MyApplication()
            :base()
{
    _1stApp = new 1stApplication(this._context);
    _2ndApp = new 2ndApplication(this._context);
    // etc...
}

以及基础构造函数

public BaseApplication()
{
    _context= new myEntities ();
}

public BaseApplication(myEntities context)
{
    if (context==null)
        _context = context;
    else
        _context= new myEntities ();
}

在MyApplication构造函数中我要么传递由另一个应用程序创建的上下文,要么我想创建一个新的上下文。在任何一种情况下,我都希望与MyApplication实例化的所有其他应用程序类(1stApp,2ndApp等)共享相同的上下文。

我不想在两个地方都保留相同的代码。

3 个答案:

答案 0 :(得分:5)

public MyApplication(myEntities context)
        :base(context)
{
   _1stApp = new 1stApplication(this._context);
   _2ndApp = new 2ndApplication(this._context);
   etc...
}

public MyApplication()
    :this(new myEntities())
{ }

答案 1 :(得分:1)

您只能使用一个c'tor(如果您使用的是C#3.5或更高版本)。只需使用这样的可选参数:

public MyApplication(myEntities context = null)
            :base(context)
    {

        _1stApp = new 1stApplication(this._context);
        _2ndApp = new 2ndApplication(this._context);
        etc...
    }

public BaseApplication(myEntities context)
        {
            if (context!=null)
                _context = context;
            else
                _context= new myEntities ();
        }

HTH Thomas

答案 2 :(得分:0)

在构造函数体之前,使用:

对于基类构造函数,使用:

 : base (arguments)

对于同一个类,但使用另一个构造函数:

 : this (arguments)

在您的情况下,这个this关键字:

public MyApplication(myEntities context)
        :base(context)
{
    // custom
}

public MyApplication()
     : this (new myEntities())
{
    _1stApp = new 1stApplication(this._context);
    _2ndApp = new 2ndApplication(this._context);
    etc...
}