의 여러 버전을 대신 상속의 제네릭을 사용하는 방법, 다음과 같은 코드가 있다고 가정 해 고객의 전화는, 일부는기업에서 뭔가
질문은 ... 등 계정의 전화입니다 "이 가능하며 만약 그렇다면 그럼 어떻게?" 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; }
}
을 t는 전화의 GetOwnerID() 현재 소유자의 GetOwnerID() 결과를 반환 할 수있는 방법이 없기 때문에 컴파일합니다. 나는이 같은 것을 볼 수 있었다 클라이언트 관점에서 최종 결과를 희망 :
Account myAccount = new Account();
myAccount.AccountID = 10;
int ownerID = myAccount.Phone.GetOwnerID(); //this would return 10.
컴파일과 런타임이 혼란 스럽습니다. 무언가가 부족할 경우,'return default (T)'를 사용하여 컴파일 할 수있다. 'SetPhone (IUsePhone ..) '메소드가 있다면 고려해보십시오. 'Account/Customer'는'IUsePhone' 에서조차''전화 번호로 통일되지 않습니다. –
이것은 어리석게 들릴지도 모릅니다. 실제로 내가 말하는 것을 할 방법이 없을 수도 있습니다. (SetPhone 메서드를 통해) 언급 한 것처럼 반사 또는 종속성 주입을 사용하지 않아도되기를 바랬습니다. 더 많이 생각할수록 두 옵션을 멀리 가져 가면 불가능 해 보이지만 실제로는 거기 사람들이 그래서 나는 그것이 가치가 있다고 생각했다. – IWriteApps
팩토리 패턴 (http://www.dofactory.com/Patterns/PatternFactory.aspx) –