我有以下课程
public class LockRequest
{
public int Id { get; set; }
public string TypeName { get; set; }
public bool Ok { get; set; }
public LockRequest ( int id, string t)
{
Id = id;
TypeName = t;
}
}
然后,它在委托中引用,如下所示
private static void ReceiveLockRequest<LockRequest>(PacketHeader header, Connection connection, LockRequest input )
{
LockRequest lr = new LockRequest(1, "SomeTypeName" );
Console.WriteLine( String.Format ( "{0} ", input.TypeName) );
}
编译时,委托中的两行都会导致编译错误。 带有“new()”的行产生“无法创建类型类'LockRequest'的实例,因为它没有'new()'约束。 显示一些输入数据的行给出“类型'Lockrequest'不包含'TypeName'的定义,也没有扩展方法'TypeName'......等”。
有人可以解释为什么会出现这种情况吗?
我的开发环境是Ubuntu 10.04(64位)和Monodevelop 2.8.6.3
TIA
可以添加一些信息。
我改变了类的名称,并编译了这个东西。整个类将由ProtoBuf序列化,因此必须使用属性进行修饰。这是一个样本
[ProtoContract]
public class Foo
{
[ProtoMember(1)]
public int { get; protected set; }
[ProtoMember(2)]
public string TypeName { get; protected set; }
...
在我添加属性后,单声道停止编译。同样的错误再次提升。 为了测试它,我评论了属性,执行全部清理,重新编译。错误再次出现,好像MonoDevelop缓存了它们。
我需要一些帮助,而不是在最初的帖子之后。
2013年10月31日
谢谢Jester。它是来自NetworkCommDotNet库的事件处理程序。
我的错误:
1)第一个错误(成员未被识别)从“输入”参数作为普通对象出现(有点令人讨厌)的事实引发。用另一种方法强制转换就可以了。 2)关于instanciation的错误:库中的委托定义有一个where子句,它声明T必须是class,但没有new()约束。
答案 0 :(得分:1)
那不是代表,这是一种通用的方法。 目前尚不清楚您想要做什么以及为什么需要通用方法。 如果你真的这样做,那就试试一下:
private static void ReceiveLockRequest<T>(PacketHeader header, Connection connection, T input) where T:LockRequest
PS:你的开发环境很老,考虑升级。