43 lines
1.3 KiB
C#
43 lines
1.3 KiB
C#
namespace DefaultNamespace
|
|
{
|
|
public class BaseClass {}
|
|
|
|
public class ChildClass : BaseClass {}
|
|
|
|
public delegate void CoVarianceHandler(ChildClass args);
|
|
public delegate BaseClass ContraVarianceHandler();
|
|
|
|
public class Delegates
|
|
{
|
|
public event CoVarianceHandler CoVariance;
|
|
public event ContraVarianceHandler ContraVariance;
|
|
|
|
public void OnBaseClass(BaseClass args) {}
|
|
public void OnChildClass(ChildClass args) {}
|
|
|
|
public BaseClass OnReturnBaseClass()
|
|
{
|
|
return new BaseClass();
|
|
}
|
|
|
|
public ChildClass OnReturnChildClass()
|
|
{
|
|
return new ChildClass();
|
|
}
|
|
|
|
public void Init()
|
|
{
|
|
CoVariance += OnBaseClass;
|
|
CoVariance += OnChildClass;
|
|
|
|
CoVariance?.Invoke(new ChildClass());
|
|
// CoVariance?.Invoke(new BaseClass()); // is not working, because delegate expect an instance of ChildClass
|
|
|
|
ContraVariance += OnReturnBaseClass;
|
|
ContraVariance += OnReturnChildClass;
|
|
|
|
BaseClass baseClass = ContraVariance?.Invoke();
|
|
// ChildClass childClass = ContraVariance?.Invoke(); // is not working, because delegate returns only an instance of BaseClass
|
|
}
|
|
}
|
|
} |