[英]C#: Generics — Infer the Generic Type of a Generic Type
我什至不知道如何問這個問題,所以我只給出代碼示例。
這是域:
public interface ISubscriptionProvider<T>
{
void Subscribe(Action<T> callback);
}
public class Notification {}
public class CurrentUserNotifications : ISubscriptionProvider<Notification>
{
public void Subscribe(Action<Notification> callback) { }
}
這是我要神奇的方法:
public void Subscribe<P, T>(Action<T> callback) where P : ISubscriptionProvider<T>
{
// body left out -- code uses P
}
這有效,這是您的稱呼方式:
Subscribe<CurrentUserNotifications, Notification>((n) => Console.WriteLine(n));
所以問題是: 有沒有辦法使它像這樣可調用 :
Subscribe<CurrentUserNotifications>((n) => Console.WriteLine(n));
基本上,可以推斷出操作類型應該只是來自ISubscriptionProvider<T>
。
此訂閱方法位於靜態類上(它是靜態方法,我省略了那一部分)。 這個想法是,它將負責構造ISubscriptionProvider<T>
並將其保持為單例(可能與structuremap一起使用)。 因此在使用中:
Messages.Subscribe<CurrentUserNotifications>((n) => Console.WriteLine(n));
謝謝!
更新:
這有點題外話,但是如果有斯卡拉人讀過這個……
...是更高種類的例子嗎? 就像是:
public void Subscribe<P<T>>(Action<T> callback) { }
其中P<_>
是較高種類的類型?
你為什么不能只用
public void Subscribe<T>(Action<T> callback)
{
}
在您的方案中,類型P參數無關緊要,因為它從未使用過。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.