泛型和返回类对象
本文关键字:对象 返回 泛型 | 更新日期: 2023-09-27 18:10:25
我正在尝试使用泛型返回类的对象。
这是泛型类
public class ClientBase <S>
{
protected S CreateObject()
{
return default(S) ;
}
}
这是我如何尝试使用它…
public class ClientUser : ClientBase <SomeClass>
{
public void call()
{
var client = this.CreateObject();
client.SomeClassMethod();
}
}
当我在客户端对象中获得SomeClassMethod()
时,当运行代码时,它在以下行给出错误:
client.SomeClassMethod ();
错误是"对象引用未设置为对象的实例"。我知道在通用类ClientBase的CreateObject()方法中缺少一些东西;我就是想不明白。有人能帮我一下吗?
default(S)
,其中S
为引用类型,为null。在您的示例中,default(SomeClass)
返回null。当你试图在一个空引用上调用一个方法时,那就是你得到异常的时候。
您是否试图返回SomeClass
的默认实例?您可能希望在泛型类中使用new()
约束和return new S()
,像这样:
public class ClientBase<S> where S : new()
{
protected S CreateObject()
{
return new S();
}
}
如果S
需要是引用类型,你也可以约束它为class
:
public class ClientBase<S> where S : class, new()
{
protected S CreateObject()
{
return new S();
}
}
查看default(T)
的功能:http://msdn.microsoft.com/en-us/library/xwth0h0d.aspx
在您的情况下,default(S)
将返回null(因为它是一个类)-这不是类的实例。
您需要调用new S()
或其他S
构造函数或在派生类中重写CreateObject
。