2

「UserSettings」というカスタムオブジェクトを返すサービスがあります。アプリケーションで「UserSettings」オブジェクトにプロパティを追加したいので、「UserSettings」から継承する「MyUserSettings」という新しいオブジェクトを作成しました。 「UserSettings」に保持されている既存のデータと、新しいプロパティ用に持っている新しいデータを含む新しいオブジェクト。このように、各プロパティを新しいオブジェクトの同じプロパティに1つずつマップする必要はありません。

_MyUserSettings.Name=_UserSettings.Name;

既存のオブジェクトのすべてのプロパティを新しいオブジェクトに一度に取り込むために私が行っていることへの方法またはより良いアプローチはありますか?

4

2 に答える 2

4

はい、コピーコンストラクタパターンを使用できます。それはあなたに他の利点を与えるでしょう-あなたはパブリックプロパティセッターを必要としないのでオブジェクトは不変になります。

public MyUserSettings(UserSettings baseSettings)
{
    // TODO: set all properties
}
于 2012-10-29T15:50:56.080 に答える
2

残念ながら、これが唯一の方法ですが、特定のメカニズムは変更される可能性があります。多くの方法があります(すべてをリストするわけではありません):

  • アイテムを取得し、フィールド全体のこの手動コピーを実行するコピーコンストラクタ。
  • 同じことを達成するためのより一般的なメカニズムを持たせるには、リフレクションを使用します。
  • AutoMapperのようなものを使用してください。

それらはすべて、ほぼ同じことをすることに要約されます。

UserSettingsが実際にである場合は、MyUserSettings単純にキャストできます。

var mySettings = (MyUserSettings)settings;

ただし、UserSettingsが本当にの場合、これは失敗しますUserSettings

于 2012-10-29T15:51:16.280 に答える