[英]How to use templated delegate
我正在尝试在我的一个课程中使用模板化委托。
这里的类定义:
internal class MyClass : BaseClass
{
public delegate T Create<T>(int identity) where T : SomeOtherClass;
public Create<T> CreateCB {get;set;} //<-- This here doesn't compile
}
我将使用CreateCB
这样的CreateCB
return CreateCB<InheritedClassFromSomeOtherClass>(someId);
和
return CreateCB<OtherInheritedClassFromSomeOtherClass>(someId);
等等
我无法对整个MyClass
模板化,因为它将需要使用委托来创建许多继承自SomeOtherClass
类型
不编译的行不必是属性,但是我仍然需要使用我的通用模板委托。 我怎样才能做到这一点?
我的应用程序目标.net 4客户端配置文件
您的T
的作用域是委托人,但是您尝试在属性中使用的T
是未定义的。
您的问题是没有通用属性,因此无法定义T
有两种解决方法:
使该类通用,因此T
随处定义:
internal class MyClass<T> : BaseClass where T : SomeOtherClass { public delegate T Create(int identity); // Now T is in scope public Create CreateCB { get; set; } }
如果确实不能使类通用,则使用getter / setter对,但这很丑陋 :
internal class MyClass : BaseClass { private object _createCB; public delegate T Create<T>(int identity) where T : SomeOtherClass; public Create<T> GetCreateCB<T>() where T : SomeOtherClass; { return (Create<T>)_createCB; } public void SetCreateCB<T>(Create<T> fn) where T : SomeOtherClass; { _createCB = fn; } }
希望这段代码能说明为什么一开始就没有通用属性。 无论如何,您会因为存储而失去强类型。 而且您必须在每个get / set上显式提供T
最好与之保持一致。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.