挨拶仲間のメンバーは、:保護されたコンストラクタを持つオブジェクトのインスタンスを作成することは可能ですか?問題の状況は、このようなある
public abstract class BaseClass
{
protected BaseClass()
{
// some logic here
}
protected BaseClass(Object parameter) : this()
{
// some more logic
}
}
public class Descendant : BaseClass
{
// no constructors
}
私は子孫クラスにActivator.CreateInstanceを呼び出すようにしようとしているが、なしコンストラクタが発見されました。
には、Descentantクラスのを明示的に定義する必要がありますか?
私が使用したバインディングは、これらのされていますBindingFlags.Instance | BindingFlags.NonPublic
注1:それはいくつかの影響力を持っている必要がある場合、私は、実際にAppDomain.CreateInstanceAndUnwrap()を呼んでいます。
domain.CreateInstanceAndUnwrap(path, typeName, false, BindingFlags.Instance |
BindingFlags.NonPublic, null, new[] { parameter }, null, null);
注2:私は明示的に子孫クラスで保護されたコンストラクタを定義する場合、それは動作しますが、私は、可能な場合は、これを避けるためにしたいと思います。
問題はコンストラクタが実際に継承されていないため、派生型を検索することが非生産的であることです。 – dlev
私はそれを知っていますが、他のプログラマーにその1つのデフォルトコンストラクターを何度も強制的に実装させたくありません(私はそれも嫌いです)。 – SmartK8
それを知っていれば、別のアプローチが必要であることもわかります。呼び出すコンストラクタが存在しません! – dlev