using System;
public class Test {
interface MyInterface { }
delegate void MyFuncType<in InType>(InType input);
class MyClass<T> where T : MyInterface
{
public void callDelegate(MyFuncType<MyInterface> func)
{
MyFuncType<T> castFunc1 = (MyFuncType <T>) func; //Error
MyFuncType<T> castFunc2 = func as MyFuncType<T>;
MyFuncType<T> castFunc3 = func is MyFuncType<T> ? (MyFuncType<T>)func : (MyFuncType<T>)null; //Error
}
}
public static void Main()
{
Console.WriteLine("hello");
}
}
dXNpbmcgU3lzdGVtOwoKcHVibGljIGNsYXNzIFRlc3QgewogICAgCiAgICBpbnRlcmZhY2UgTXlJbnRlcmZhY2UgeyB9CiAgICBkZWxlZ2F0ZSB2b2lkIE15RnVuY1R5cGU8aW4gSW5UeXBlPihJblR5cGUgaW5wdXQpOwoKICAgIGNsYXNzIE15Q2xhc3M8VD4gd2hlcmUgVCA6IE15SW50ZXJmYWNlCiAgICB7CiAgICAgICAgcHVibGljIHZvaWQgY2FsbERlbGVnYXRlKE15RnVuY1R5cGU8TXlJbnRlcmZhY2U+IGZ1bmMpCiAgICAgICAgewogICAgICAgICAgICBNeUZ1bmNUeXBlPFQ+IGNhc3RGdW5jMSA9IChNeUZ1bmNUeXBlIDxUPikgZnVuYzsgLy9FcnJvcgogICAgICAgICAgICBNeUZ1bmNUeXBlPFQ+IGNhc3RGdW5jMiA9IGZ1bmMgYXMgTXlGdW5jVHlwZTxUPjsgCiAgICAgICAgICAgIE15RnVuY1R5cGU8VD4gY2FzdEZ1bmMzID0gZnVuYyBpcyBNeUZ1bmNUeXBlPFQ+ID8gKE15RnVuY1R5cGU8VD4pZnVuYyA6IChNeUZ1bmNUeXBlPFQ+KW51bGw7IC8vRXJyb3IKICAgICAgICB9CiAgICB9CiAgICAKICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBNYWluKCkKICAgIHsKICAgICAgICBDb25zb2xlLldyaXRlTGluZSgiaGVsbG8iKTsKICAgIH0KfQ==