泛型和返回类对象

本文关键字:对象 返回 泛型 | 更新日期: 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