これはあなたの質問の側にあります (コピー コンストラクターの答えは 1 つの可能な方法のようです)。ただし、基本クラスからサブクラスにキャストすることはできますが、サブクラスからのキャストのように成功することが保証されていないことに注意してください。 -クラスをベースに。下記参照:
public class Base
{
}
public class Child1 : Base
{
}
public class Child2 : Base
{
}
main()
{
Child1 ch1 = new Child1();
Child2 ch2 = new Child2();
Base myBase;
myBase = ch1; // Always succeeds, no cast required
myBase = ch2; // Always succeeds, no cast required
// myBase contains ch2, of type Child2
Child1 tmp1;
Child2 tmp2;
tmp2 = (Child2)myBase; // succeeds, but dangerous
tmp2 = mybase as Child2; // succeeds, but safer, since "as" operator returns null if the cast is invalid
tmp1 = (Child1)myBase; // throws a ClassCastException and tmp1 is still unassigned
tmp1 = myBase as Child1; // tmp1 is now null, no exception thrown
if(myBase is Child1)
{
tmp1 = (Child1)myBase; // safe now, as the conditional has said it's true
}
if(myBase is Child2) // test to see if the object is the sub-class or not
{
tmp2 = (Child2)myBase; // safe now, as the conditional has said it's true
}
}
それが理にかなっていることを願っています。やみくもにキャストすると、例外がスローされる可能性があります。キーワードを使用するas
と、成功するか、null が返されます。is
または、割り当てる前に if ステートメントとキーワードを使用して事前に「テスト」することもできます。