同样的层次结构,只是泛型多了一个参数,实例化的时候就报“加载格式不正确”的错误
加载格式不正确:
AbstractSerializable<PO> c = new AbstractSerializable<PO>();
AbstractSerializable<PO, PO> b = new AbstractSerializable<PO, PO>();
第二句就会执行错误,第一句运行的很好,感觉就只是多了一个参数而以,不知道哪位能帮忙解释一下这奇怪的原因.TIA!/*
以下是测试代码
如果层次设计有问题也谢谢指出
*/public class ActiveRecord<T> where T : class {
// ...
}// T 继承于 AbstractPO<T>
public class AbstractData<T>
where T : AbstractPO<T>, new() {
// ...
}// 继承ActiveRecord<T>
// T 继承于 AbstractPO<T>
public class AbstractPO<T> : ActiveRecord<T>
where T : AbstractPO<T>, new(){
// ...
}// 继承AbstractPO<T>
public class PO : AbstractPO<PO> {
// ..
}// 继承AbstractData<T>
// T 继承于 AbstractPO<T>
public class AbstractSerializable<T> : AbstractData<T>
where T : AbstractPO<T>, new() {
// ...
}// 继承AbstractData<T>
// S,T 都继承于 AbstractPO<T>
public class AbstractSerializable<S, T> : AbstractData<T>
where S : AbstractPO<S>, new()
where T : AbstractPO<T>, new() {
// ...
}
// 执行
protected void Page_Load(object sender, EventArgs e)
{
try {
// 执行成功
AbstractSerializable<PO> c = new AbstractSerializable<PO>();
// 失败
AbstractSerializable<PO, PO> b = new AbstractSerializable<PO, PO>();
} catch (Exception ex) {
Response.Write(ex.ToString());
}
}页面错误的输出是
System.BadImageFormatException: 试图加载格式不正确的程序。 (异常来自 HRESULT:0x8007000B) 在 AbstractSerializable`2..ctor() 在 __Default.Page_Load(Object sender, EventArgs e) 位置
加载格式不正确:
AbstractSerializable<PO> c = new AbstractSerializable<PO>();
AbstractSerializable<PO, PO> b = new AbstractSerializable<PO, PO>();
第二句就会执行错误,第一句运行的很好,感觉就只是多了一个参数而以,不知道哪位能帮忙解释一下这奇怪的原因.TIA!/*
以下是测试代码
如果层次设计有问题也谢谢指出
*/public class ActiveRecord<T> where T : class {
// ...
}// T 继承于 AbstractPO<T>
public class AbstractData<T>
where T : AbstractPO<T>, new() {
// ...
}// 继承ActiveRecord<T>
// T 继承于 AbstractPO<T>
public class AbstractPO<T> : ActiveRecord<T>
where T : AbstractPO<T>, new(){
// ...
}// 继承AbstractPO<T>
public class PO : AbstractPO<PO> {
// ..
}// 继承AbstractData<T>
// T 继承于 AbstractPO<T>
public class AbstractSerializable<T> : AbstractData<T>
where T : AbstractPO<T>, new() {
// ...
}// 继承AbstractData<T>
// S,T 都继承于 AbstractPO<T>
public class AbstractSerializable<S, T> : AbstractData<T>
where S : AbstractPO<S>, new()
where T : AbstractPO<T>, new() {
// ...
}
// 执行
protected void Page_Load(object sender, EventArgs e)
{
try {
// 执行成功
AbstractSerializable<PO> c = new AbstractSerializable<PO>();
// 失败
AbstractSerializable<PO, PO> b = new AbstractSerializable<PO, PO>();
} catch (Exception ex) {
Response.Write(ex.ToString());
}
}页面错误的输出是
System.BadImageFormatException: 试图加载格式不正确的程序。 (异常来自 HRESULT:0x8007000B) 在 AbstractSerializable`2..ctor() 在 __Default.Page_Load(Object sender, EventArgs e) 位置
{
// ...
}
最理想的是修改我自己的代码
但是为什么“where T : AbstractPO<T> , new()”和“where T : S”有很大区别吗?
能人,可否解释一下?public class AbstractSerializable <S, T> : AbstractData <T>
where S : AbstractPO <S> , new()
where T : S {
// ...
}
那么AbstractPO <S> 和 AbstractPO <T> 不能并存吗?
问题还没解决。
就可已运行了PS: 上面的错误都是指运行时错误
{
}
这样改就好用。具体为什么思考中