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

本文关键字:构造函数 创建 两个 | 更新日期: 2023-09-27 18:25:13

我有以下方法:

public void Add<T>() where T : ISetup, new() {
  new T().Run();
} // Add

这可以如下使用:

Add<SettingsSetup>()

设置设置所在位置:

public class SettingsSetup : ISetup {  
  private Func<String, String> _resolver;
  public SettingsSetup(Func<String, String> resolver) {
    _resolver = resolver;
  }
  public void Run() { }
}

我希望能够使用添加如下:

Add<SettingsSetup>()

或者传递要在SettingsSetup上使用的参数:

Add<SettingsSetup>(Func<String, String>)

这可能吗?

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

Resolver属性添加到ISetup,并从Add:的过载中进行设置

public void Add<T>(Func<String, String> resolver) where T : ISetup, new() 
{
  var setup = new T();
  setup.Resolver = resolver;
  setup.Run();
}

simple:

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