さて、私はコードのリファクタリングを行います。彼が実装する他の10のタイプがあると想像してください:)上記のソリューションは実行可能ですが、拡張性の点ではあまりエレガントではありません。
だから、ここに私の解決策があります:
1)共通の連絡先プロパティを使用して基本クラスを実装します
public abstract class BaseContact
{
public string Name { get; set; }
public abstract string Url { get; set; }
}
2)具体的なタイプを実装する
public class FbContact : BaseContact
{
private string _baseUrl = "http://facebook.com/{0}";
private string _url = string.Empty;
public override string Url
{
get { return _url; }
set { _url = string.Format(_baseUrl, value); }
}
}
public class LinkedInContact : BaseContact
{
private string _baseUrl = "http://linkedin.com/{0}";
private string _url = string.Empty;
public override string Url
{
get { return _url; }
set { _url = string.Format(_baseUrl, value); }
}
}
3)これはナビゲーションURLを設定するための単なるヘルパークラスです
public static class NavigationCreator
{
public static void SetUrl(BaseContact contact, HyperLink link)
{
link.NavigateUrl = contact.Url;
}
}
4)結果を視覚化するためのいくつかのテストコード
List<BaseContact> items = new List<BaseContact>();
for (int i = 0; i < 5; i++)
{
BaseContact item;
if (i % 2 == 0) item = new FbContact(); else item = new LinkedInContact();
item.Url = "My name " + i;
items.Add(item);
}
foreach (var contact in items)
{
HyperLink link = new HyperLink();
NavigationCreator.SetUrl(contact, link);
Console.WriteLine(link.NavigateUrl);
}
Console.Read();