あなたの会社で、次のコードがあるとします。
public abstract Phone
{
public int PhoneID {get;set;}
public string PhoneNumber {get;set;}
}
public CustomerPhone : Phone
{
public int CustomerID {get;set;}
}
public AccountPhone : Phone
{
public int AccountID {get;set;}
}
これが意味することは、複数のタイプの電話があり、一部は顧客の電話、一部はアカウントの電話など...
問題は、「これは可能ですか。可能であれば、どのようにですか?」ということです。Type をプラグインできる汎用の Phone クラスを用意し、必要に応じてその Type の情報 (AccountID または CustomerID) を使用するのが最も簡単なようです。また、これがDIなしで可能かどうかを確認しています(コンストラクター、メソッド、またはプロパティを介して)。
私の頭の中にあるものは、次のようになります。
public interface IUsePhone
{
int GetOwnerID();
}
public class Phone<T> where T : IUsePhone
{
//all of Phone's properties from above.
public int GetOwnerID()
{
//return T or item or something's GetOwnerID();
}
}
public class Account : IUsePhone
{
private int _accountID;
//other Account members, including an AccountID property.
public int GetOwnerID()
{
return _accountID;
}
public Phone<Account> Phone { get; set; }
}
public class Customer : IUsePhone
{
private int _customerID;
//other Customer members, including an CustomerID property.
public int GetOwnerID()
{
return _customerID;
}
public Phone<Customer> Phone { get; set; }
}
Phone の GetOwnerID() は現在、所有者の GetOwnerID() の結果を返す方法がないため、これはコンパイルされません。クライアントの観点からの最終結果が次のようになることを願っています。
Account myAccount = new Account();
myAccount.AccountID = 10;
int ownerID = myAccount.Phone.GetOwnerID(); //this would return 10.