这个问题很难表达,但如果我有:
public class BunnyManager
{
public Bunny<T> GetBunny<T>(string someJson)
{
return new Bunny<T>(someJson);
}
}
public class Bunny<T>
{
T parsedJson { get; set; }
public Bunny<T>(string someJson)
{
if (!string.IsNullOrEmpty(someJson))
parsedJson = ConvertJsonStringToObject<T>(someJson);
}
}
在某些情况下,我希望获得一个没有任何json的Bunny对象,因为json字符串为空,所以我不关心T是什么。
在这种情况下,我可以创建一个重载或其他东西来完全忽略T
,或者我可以调用GetBunny<null>
或GetBunny<object>
吗?
我想知道解决这个问题的正确方法是什么。
发布于 2015-04-10 22:38:04
你可以有一个非泛型的bunny类,泛型类继承自这个类。
public class BunnyManager
{
public Bunny<T> GetBunny<T>(string someJson)
{
return new Bunny<T>(someJson);
}
public Bunny GetBunny()
{
return new Bunny();
}
}
public class Bunny
{
}
public class Bunny<T> : Bunny
{
T parsedJson { get; set; }
public Bunny(string someJson)
{
if (!string.IsNullOrEmpty(someJson))
parsedJson = ConvertJsonStringToObject<T>(someJson);
}
}
发布于 2015-04-10 22:39:17
您始终可以创建非泛型基类
public class Bunny
{
}
public class Bunny<T> : Bunny
{
}
发布于 2015-04-10 22:39:56
首先,如果类是泛型的,那么所有成员都被认为是泛型的,不需要泛型参数-甚至不需要构造函数。
其次,如果您不关心T
,那么您可以重载GetBunny
而不使用T
,因为基于不同泛型参数的重载类和方法是允许的(例如,参见Tuple
类)。
我为没有参数的泛型找到的最简单的方法是创建一个非泛型基类(abstract class Bunny
),泛型继承自这个基类(因此是Bunny<T> : Bunny
),这使得它更容易维护,比如不同类型的List<Bunny>
。这特别适用于您的情况,因为基类是一个不太具体的实现,因此适合通常的继承模式。
https://stackoverflow.com/questions/29564130
复制相似问题