1

私が知りたいのは、このようなことをする可能性があるかどうかです:

class A
{
  prop T1

  prop T2

  prop T3

  prop T4
}

class B : A
{
  prop T5
}

そして、A を B にキャストします。

A a = new A();
B b = a;

たぶん、そのようなもののためのある種の静的コンバータークラスがあるので、コードは次のようになります。

A a = new A();
B b = null;
UltimativeCaster.BaseclassCast(a, b);

これが重複した質問である場合は申し訳ありません。アイデアや解決策、またはリンクを提供していただければ幸いです。

EDIT:すべてのプロパティを見つけて値をコピーするアルゴリズム。基本クラスであるため、プロパティは一致します。

4

5 に答える 5

4

A から B にキャストすることはできませんが、次のような特定のコンストラクターを使用できる可能性があります

public B(A a)
{
    this.T1 = a.T1;
    this.T2 = a.T2;
    ...
    this.T5 = defaultvalue;
}
于 2013-08-29T08:25:40.717 に答える
4

A は B のスーパークラスであるため、 abに「キャスト」することはできません。

public B CreateB(A a)
{
   B b = new B();
   b.T1 = a.T1;
   b.T2 = a.T2;
   b.T3 = a.T3;
   b.T4 = a.T4;
   return b;
}

ところで、https://github.com/AutoMapper/AutoMapperのような自動マッパー ライブラリにも興味があるかもしれません。

于 2013-08-29T08:28:24.183 に答える
1

これをより頻繁に、異なる型で行う必要がある場合は、ファクトリ クラスを作成して、さまざまな種類のソースからインスタンスを作成することを検討できます。

public static class BFactory
{
    public static B CreateFromA(A a)
    {
        B result = new B();

        result.T1 = a.T1;
        result.T2 = a.T2;
        result.T3 = a.T3;
        result.T4 = a.T4;
        result.T5 = 0;

        return result;
    }
}
于 2013-08-29T08:33:50.660 に答える
0

これを行うことはできません。あるタイプを別のタイプとして表現するためにポリモーフィズムを使用するには、2 つのタイプ間に「IS A」関係が必要です。Aではないため、Bこれは決して機能しません。

于 2013-08-29T08:29:01.780 に答える