我有以下课程
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
谢谢你,小丑。它是一个来自 NetworkCommDotNet 库的事件处理程序。
我的缺点:
1)第一个错误(成员无法识别)源于(有点令人惊讶)“输入”参数作为普通对象出现的事实。用另一种方法铸造它就可以了。2)关于实例化的错误:库中的委托定义有一个 where 子句,它声明 T 必须是类,但没有 new() 约束。