使用两个不同的构造函数创建T.

时间:2014-10-01 21:09:17

标签: c#

我有以下方法:

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>)

这可能吗?

2 个答案:

答案 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();
}