using System.Collections.Generic;
public interface ITest<in TIn, out TOut>
TOut MyFunction(Func<TOut, TIn> transform);
void WriteSomething(TIn arg);
public string BaseMiddleAndDerived { get; set; }
public string BaseAndMiddleOnly { get; set; }
public string DerivedOnly { get; set; }
class Test<TIn, TOut> : ITest<TIn, TOut>
public TOut MyFunction(Func<TOut, TIn> transform)
public TOut GetSomething()
public void WriteSomething(TIn arg)
Console.WriteLine(arg.BaseMiddleAndDerived);
public static void Main()
Console.WriteLine("Hello World");