2014-10-01 2 views
0

я следующий метод:Создать T с двумя различными конструкторами

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

Или передать параметр для использования на SettingsSetup:

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

Возможно ли это?

+0

Что заставляет вас думать, что это не так? Вы пытались просто написать другой метод перегрузки? –

+0

Да, я не смог выполнить новый T (Func resolver) в методе добавления –

+1

Помните, что ISetup - это интерфейс ... Я мог бы сделать его базовым классом. В основном SettingsSetup или любая другая настройка должна позволять использоваться с помощью Func или ничего ... –

ответ

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(); 
} 
+0

Да, это то, что я сказал в своем комментарии ниже вопроса. –

+0

смотрите в моем комментарии и ссылку, которая находится ниже Edit. Есть ответ, но Дэйв тоже это сделал. – W92

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

Смежные вопросы