在一間非通用類中聲明這兩個方法,它們共享相同的簽名:Func鍵委託聲明的方法
private TypeResolverResult<T> TryRetrieveFromReusable<T>(TypeResolverConfiguration<T> typeResolverConfiguration) where T : class
{
return null;
}
private TypeResolverResult<T> BuildNew<T>(TypeResolverConfiguration<T> typeResolverConfiguration) where T : class
{
return null;
}
如何創建一個表示這些方法簽名的委託?
我似乎無法得到它,我想:
private Func<TypeResolverConfiguration<T>, TypeResolverResult<T>> _typeResolveFunc;
但明顯這不起作用,因爲類是不通用的,我不能改變的。
感謝
UPDATE
這是多了還是少了什麼,我需要:
public class Manager : ATypeResolver, IManager
{
private neeedDelegate;
public Manager(RuntimeConfiguration runtimeConfiguration, IList<RepositoryContainer> repositories)
{
if (runtimeConfiguration.WhatEver)
{
neeedDelegate = TryRetrieveFromReusable;
}
else
{
neeedDelegate = BuildNew;
}
}
public override TypeResolverResult<T> Resolve<T>() where T : class
{
//Want to avoid doing this:
if (runtimeConfiguration.WhatEver)
{
TryRetrieveFromReusable(new TypeResolverConfiguration<T>());
}
else
{
BuildNew(new TypeResolverConfiguration<T>());
}
//and have just this
neeedDelegate<T>(new TypeResolverConfiguration<T>());
}
private TypeResolverResult<T> TryRetrieveFromReusable<T>(TypeResolverConfiguration<T> typeResolverConfiguration) where T : class
{
return null;
}
private TypeResolverResult<T> BuildNew<T>(TypeResolverConfiguration<T> typeResolverConfiguration) where T : class
{
return null;
}
}
在什麼情況下你想使用它?如果什麼都不是通用的,那麼很難擁有泛型類型參數。即使類型不是因爲調用者定義了類型,方法也可以是通用的。但是,除非包含類型是通用的,否則字段和屬性不能是通用的。 – cadrell0
@ cadrell0這些方法是通用的,但類不是通用的,它們有一個已定義的約束:class – Marco
@ cadrell0是的,你是對的,回到開頭。 – Marco