我有以下方法:
public void Add<T>() where T : ISetup, new() {
new T().Run();
} // Add
可以使用如下:
Add<SettingsSetup>()
SettingsSetup的位置:
public class SettingsSetup : ISetup {
private Func<String, String> _resolver;
public SettingsSetup(Func<String, String> resolver) {
_resolver = resolver;
}
public void Run() { }
}
我希望能够使用Add如下:
Add<SettingsSetup>()
或传递要在SettingsSetup上使用的参数:
Add<SettingsSetup>(Func<String, String>)
这可能吗?
答案 0 :(得分:1)
简单:
public interface ISetup
{
void Run();
int SomeProp { get; set; }
}
public class Setup : ISetup
{
public void Run()
{
throw new NotImplementedException();
}
public int SomeProp
{
get
{
return 2;
}
set
{
SomeProp = value;
}
}
}
public bool MyMethod<T>(T t) where T : ISetup
{
return t.SomeProp != 2;
}
并使用:
var setup = new Setup();
bool response = MyMethod<Setup>(setup); // false
修改强>: 这里有很好的资料来源:http://msdn.microsoft.com/en-us/library/bb384067.aspx
答案 1 :(得分:1)
将Resolver
属性添加到ISetup
,并将其设置为Add
的重载:
public void Add<T>(Func<String, String> resolver) where T : ISetup, new()
{
var setup = new T();
setup.Resolver = resolver;
setup.Run();
}