【发布时间】:2014-01-30 15:07:53
【问题描述】:
我已经看过,但并没有发现与我正在处理的内容相似。希望有一个解决方案,或提供更好的实施方案。我有一个类,可以通过一个可选参数传递给创建的实例。然后我有一个具有类似可选参数的派生类,但在其非参数构造函数中,无论可选参数如何,都会进行其他准备工作。让它调用基类参数构造函数的正确方法是什么,但仍然执行派生的非参数构造函数。
public class MyBaseClass
{
protected object preserveParm;
protected int someValue;
public MyBaseClass()
{
someValue = 1;
}
public MyBaseClass( object SomeParm ) : this()
{
preserveParm = SomeParm;
}
}
public class DerivedClass : MyBaseClass
{
private int customSecondaryProp;
private DateTime when;
public DerivedClass()
{
customSecondaryProp = 10;
someValue = 5;
}
public DerivedClass( object SomeParm ) : base( SomeParm )
{
when = DateTime.Now;
}
}
所以,如果我做一个
DerivedClass test = new DerivedClass( "testing" );
我需要它来访问基类以保留参数,但还需要访问派生类的非参数来设置示例假值。
现在,Derived 参数方法被命中,然后命中基类的参数构造函数,该构造函数调用基类的“this()”,并将链返回到 DerivedClass 参数构造函数,完成自身,但从未命中 DerivedClass 构造函数。有没有办法同时强制基类无参数和 DerivedClass 无参数构造函数?
【问题讨论】:
-
我通常会让非参数化构造函数调用具有合适值的参数化构造函数,而不是你这样做的方式。然后所有逻辑都在(类的)参数化最多的构造函数中结束,它可以调用最合适的基类构造函数(然后,如果需要,可以再次填充省略的参数以调用其最参数化的形式)跨度>
-
@Damien_The_Unbeliever,从来没有想过相反的事情,因为实际传入的对象比简单的“对象”更复杂,但会调查它。谢谢。
-
@nawfal,对于已经选择了解决方案的问题,不要费心尝试将 cmets 回填到重复项……在我看来只是浪费。
标签: c# inheritance constructor