阻止子类方法从基类构造函数运行

时间:2013-09-11 21:03:04

标签: c# inheritance

问题标题看起来有点奇怪不是吗。无论如何。所以我有一个基类,它有一些私有字段,受保护的属性和一个构造函数,它接受一个参数,我有几个基类的子类。无论何时调用这些子类方法,都需要实例化子类,并且在执行完该方法后,对象将被销毁,因此如果再次调用该方法,则应该再次生成该类的实例。 (它是一个WCF服务)现在,我想要做的是以下内容。每当调用某个子类构造函数时,我都会使用某个特定参数显式调用基类构造函数(每个子类都不同,注意:没有子类方法是相同的),当调用基类构造函数时,我想根据需要检查一下到那个参数,如果它通过检查,那么我想允许执行子类方法。在任何其他情况下,我希望它不要运行子类方法。所以我想要这样的东西。当调用该方法时,必须构造子类,为此必须构造基类,如果基类的构造函数中的检查失败,我想阻止该方法运行。我可以只有一个bool属性并在基类的构造函数中设置它并在每个方法调用上检查它。但我想做一些更通用的东西。可能是我建议的方式也不对。所以你明白我想要的东西。任何建议都会受到批评。提前谢谢

class BaseClass
{
    private bool _isValid;

    private SomeService someService;

    public BaseClass(SomeEnum value)
    {
        someService = new SomeService();

        if (someService.Validate(value))
        {
            _isValid = true;
        }
    }

    protected internal bool IsValid { get { return _isValid; } }
}

class SubClass : BaseClass
{
    // object declaration
    public SubClass () : base(SomeEnum.SomeValue)
    {
        // constructing some objects here
    }

    public Response Operation('parametereGoHere')
    {
        if (IsValid)
        {
            // perform operation. construct Response object and return it
        }
    }

    // other methods omitted.
}

因此,每当调用Operation()方法时,必须构造SubClass,导致构造BaseClass,基类设置_isValid的值,然后用来检查有效性,但我想做一些更通用的东西。让我们不要只将_isValid的值设置为true,而只是不执行任何操作或设置其他一些属性,如果Valiate()失败,只需停止执行,不要执行任何操作。在这种情况下,如果我们以某种方式设法停止类的构造,则调用路由将无法调用Operation()。如果不可能,我对我现在的解决方案非常满意。但如果是的话,我会很高兴看到这一点。注意:在每个子类中,方法都不同,我必须检查IsValid以允许执行方法。

2 个答案:

答案 0 :(得分:0)

您应该能够使用out参数来使构造函数返回值。

答案 1 :(得分:0)

很难理解你想要的东西,但听起来你想要一个基础构造函数有时不做任何事情的情况。然后简单地创建一个不执行任何操作的基础构造函数,并调用它(使用: base()调用)。如有必要,请使用伪参数。

class A {

   public A() { a= 1; }
   public A(double dummy); { }
}

class B 
   public B() : base() {  // calls the base constructor that does something
   }
   public B(int) : base(1.0) {// class the base construct that does nothing 
   }
}