Реализация шаблонного интерфейса - PullRequest
0 голосов
/ 10 июня 2011

Я пытаюсь написать это более обобщенно:

public static CormantRadDock RecreateDock(RadDockSetting settings)
{
    CormantRadDock dock = new CormantRadDock();
    settings.SetSettings(dock);
    Logger.DebugFormat("Recreated dock {0}", dock.ID);
    return dock;
}

У меня есть это:

public static T Recreate<T>() where T : new()
{
    T _control = new T();
    //settings.SetSettings(dock);
    Logger.DebugFormat("Recreated control {0}", (_control as Control).ID);
    return _control;
}

Общее решение:

public interface ISetting<T>
{
    void SetSettings(T obj);
}

public void SetSettings(CormantRadDock dock)
{
    // do stuff with dock
}

Спасибо!

Ответы [ 3 ]

2 голосов
/ 10 июня 2011

Это то, что вы пытаетесь сделать?

// move the generic type parameter up here so the interface is generic
// and not the method definition
public interface ISetting<T>
{
    void SetSettings(T obj);
}

Тогда вы можете успешно реализовать его в классе:

public class SomeClass: ISetting<YourSettingType>
{
    public void SetSettings(YourSettingType obj) { ... }
}
0 голосов
/ 10 июня 2011

Как насчет этого:

public interface ICanBeRecreated<T>
{
    T Recreate();
}

public class CormantDock : ICanBeRecreated<CormantDock>
{
    private RadDockSetting _settings;

    private void ApplySettings(RadDockSetting settings)
    {
        // apply settings       
    }

    public CormantDock Recreate()
    {
        var dock = new CormantDock;
        dock.ApplySettings(_settings);
    }
}
0 голосов
/ 10 июня 2011

либо

    public abstract class ISetting<T> 
{     
public abstract void SetSettings<T>(T obj); 
}  
public void SetSettings<T>(T dock) 
{     
// do stuff with dock 
} 

или

    public abstract class ISetting<T> 
{     
public abstract void SetSettings(T obj); 
}  
public void SetSettings(T dock) 
{    
 // do stuff with dock 
} 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...