2

単純な問題のように見えますが、明確な解決策を思い付くことができません。以下のような2つのクラスがあります

Class Person{
    String name{get; set;}
    int age{get; set;}
}


Class Alien{
    String alienName{ get; set}
    int alienAge{get; set;}
}

これらのクラスは、私が使用しなければならないサードパーティのクラスであり、制御することはできません。しかし、ある時点で、Person オブジェクトを指定して Alien オブジェクトを構築できるようにしたいと考えています。私の例には 2 つのプロパティしかありません。実際には、Alien と Person の両方で最大 50 個のプロパティを持っている可能性があります。

Alien は Person のサブセットではなく、Person は Alien のサブセットではありません。これらは 2 つの異なるオブジェクトです。これらのオブジェクトを相互に変換する最良の方法は何だと思いますか。各プロパティを取り込んで、同等のプロパティを別のプロパティに設定するコピー メソッドを面倒に書きたくありません。これら 2 つのクラスではメソッド名が大きく異なる可能性があるため、リフレクションも使用できないと思います。理想的には、コピー手順を外部化するものを探しているので、将来 Alien または Person オブジェクトで何かが変更された場合でも、ロジックを変更する必要はありません。

助言がありますか?

ありがとうK

4

3 に答える 3

4

AutoMapperを見たいと思うかもしれません

于 2012-07-14T12:51:22.920 に答える
2

を使用しInterfacesます。がある場合は、Interfaceコピーする必要がある特定のプロパティが既に定義されています。

Interface ISubject
{
    // properties
    String name {get; set;}
    int age {get; set;}
}

Class Person : ISubject
{
    // contractors
    public Person ()
    {
        ...
    }

    public Person (ISubject subject)
    {
         name = subject.name;
         age = subject.age;
    }
    ...
}

Class Alien : ISubject
{
    // contractors
    public Alien ()
    {
        ...
    }

    public Alien (ISubject subject)
    {
         name = subject.name;
         age = subject.age;
    }
    ... 
}

そしてあなたが使用するとき:

var person = new Person();
...
ISubject subject = (ISubject) person;
var name = subject.name;

また

var person = new Person();
...
Alien subject = new Alien(person);
var name = alien.name;
于 2012-07-14T13:02:28.170 に答える
0

http://code.google.com/p/nutil/を試すことができます。プロパティをコピーするメソッドを持つ BeanUtils という名前のクラスがあります。

于 2012-07-14T12:54:45.427 に答える