0

问题标题似乎有点奇怪不是吗。反正。所以我有一个基类,它有一些私有字段、受保护的属性和一个带有一个参数的构造函数,我有几个该基类的子类。每当调用这些子类方法中的任何一个时,都需要实例化子类,并且在方法执行完成后,对象将被销毁,因此如果再次调用该方法,则应创建该类的新实例。(它是 WCF 服务)现在,我想做的事情如下。每当调用某个子类构造函数时,我都会使用某些特定参数显式调用基类构造函数(每个子类都不同,注意:没有子类方法是相同的),当调用基类构造函数时,我想根据该参数检查一些东西,如果它通过检查,那么我想允许执行子类方法。在任何其他情况下,我都不希望它运行子类方法。所以我想要这样的东西。当调用该方法时,必须构造子类,为此,还必须构造基类,如果在基类的构造函数中检查失败,我想阻止该方法运行。我可以只拥有一个 bool 属性并将其设置在基类的构造函数中,并在每个方法调用时检查它。但我想让一些更通用的东西。可能是我建议的方式也不正确。所以你明白我想要什么。任何建议都会被采纳。提前致谢 当调用该方法时,必须构造子类,为此,还必须构造基类,如果在基类的构造函数中检查失败,我想阻止该方法运行。我可以只拥有一个 bool 属性并将其设置在基类的构造函数中,并在每个方法调用时检查它。但我想让一些更通用的东西。可能是我建议的方式也不正确。所以你明白我想要什么。任何建议都会被采纳。提前致谢 当调用该方法时,必须构造子类,为此,还必须构造基类,如果在基类的构造函数中检查失败,我想阻止该方法运行。我可以只拥有一个 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以允许执行方法。

4

2 回答 2

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 
   }
}
于 2013-09-11T22:30:50.837 回答
0

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

于 2013-09-11T22:21:54.807 回答