我是新來的泛型,只是想知道是否有可能避免使用更好的面向對象方法在下面的代碼中投射。通過使用泛型避免在下面的代碼中鑄造
public class CollectorFactory
{
public static MyCollector Create(ICredential credential)
{
return new MyCollector(credential);
}
}
public class MyCollector {
public MyCredential Credential { get; set; }
public MyCollector(ICredential credential)
{
this.Credential = (MyCredential)credential;
}
public void Show()
{
Console.WriteLine(this.Credential.Username);
Console.WriteLine(this.Credential.AuthToken);
}
}
public class MyCredential : ICredential
{
public string Username{ get; set; }
public string AuthToken { get; set; }
}
public interface ICredential
{
}
有沒有辦法救ICredential到MyCredential在MyCollector的構造鑄造?我沒有選擇將Username和AuthToken放入ICredential,因爲它由兩個不同的憑證實現,這兩個憑證都具有不同的屬性集。 CollectorFactory將來將返回不同的MyCollector實例,並且都需要具有不同的憑據。
任何幫助將非常感激。
我假設你在工廠檢查憑證的類型。然後在那裏進行投射,並讓收藏者的構造函數採取特定的類型。除此之外,演員陣容沒有辦法。 –
什麼是泛型?鑄造並不昂貴,爲什麼要避免這種情況?如果您不想投射,則只需將'Credential'聲明爲'public ICredential Credential {get;組; }'。但我認爲將所有內容都保存爲界面並不是一個好主意。你真的需要重新考慮設計/你需要做什麼(而不是你想做什麼)。另外,良好的面向對象方法不會鼓勵你有空的界面。 – kurakura88