You should rework your interface, like so:
public interface IOurTemplate<T, U>
where T : class
where U : class
{
IEnumerable<T> List();
T Get(U id);
}
Then, you can implement it as a generic class:
public class OurClass<T,U> : IOurTemplate<T,U>
where T : class
where U : class
{
IEnumerable<T> List()
{
yield return default(T); // put implementation here
}
T Get(U id)
{
return default(T); // put implementation here
}
}
Or, you can implement it concretely:
public class OurClass : IOurTemplate<string,MyClass>
{
IEnumerable<string> List()
{
yield return "Some String"; // put implementation here
}
string Get(MyClass id)
{
return id.Name; // put implementation here
}
}