次のようにコードを変更する必要があります。
List<MultiServiceRequestMember> _memberList = new List<MultiServiceRequestMember>();
var type = Type.GetType(svc.NotificationClassName);
MultiServiceRequestMember newMember = null;
if (type == typeof(MultiServiceRequestMemberA))
{
newMember = new MultiServiceRequestMemberA();
//set specific properties
}
else if (type == typeof(MultiServiceRequestMemberB)) //etc.
{
//...
}
else
{
//throw or some default
}
_memberList.add(newMember);
しかし、それはコードの臭いのように見えます。他のオブジェクトに基づいてオブジェクトを初期化しようとしていると思います(NotificationInfoと呼びましょう)。次に、次のようなコードの代わりに:
if (type == typeof(MultiServiceRequestMemberA))
{
newMember = new MultiServiceRequestMemberA();
newMember.A = notificationInfo.A;
}
たぶん、次のデザインを考える必要があります。
class MultiServiceRequestMember
{
public virtual void Initialize(NotificationInfo notificationInfo) //or abstract if you wish
{
}
}
class MultiServiceRequestMemberA : MultiServiceRequestMember
{
public override void Initialize(NotificationInfo notificationInfo)
{
base.Initialize(notificationInfo);
this.A = notificationInfo.A;
}
}
その後、前のコードをそのままにして、Initializeを呼び出すことができます。