C# 返回不带泛型的未知类型
在我的抽象基类C# 返回不带泛型的未知类型,c#,generics,C#,Generics,在我的抽象基类AbstractType中,我有一个类型未知的抽象自动实现属性值。我的所有派生类都使用自己的类型实现此属性,例如string或double。通常,我知道您只需要将其设置为AbstractType,并将属性设置为T Value{…}。但是,在这种情况下,我没有能力使用泛型。在AbstractType中,我试图实现一个从AbstractType返回新派生类的方法,因此如果我使用泛型,调用方必须知道类型。如果我使用值类型对象,则调用者必须将对象包装为正确的类型-非常不方便的类型/实例检查
AbstractType
中,我有一个类型未知的抽象自动实现属性值
。我的所有派生类都使用自己的类型实现此属性,例如string
或double
。通常,我知道您只需要将其设置为AbstractType
,并将属性设置为T Value{…}
。但是,在这种情况下,我没有能力使用泛型。在AbstractType
中,我试图实现一个从AbstractType
返回新派生类的方法,因此如果我使用泛型,调用方必须知道类型。如果我使用值
类型对象
,则调用者必须将对象包装为正确的类型-非常不方便的类型/实例检查
下面是我的类结构(为了演示,简化了方法):
不使用泛型有什么方法可以做到这一点吗?可能是
动态
?你说如果使用泛型,调用者必须知道类型,但是如果使用对象
,调用者必须将对象包装成正确的类型。这不是意味着无论你选择什么,打电话的人都必须知道类型吗?据我所知,没有。这正是泛型的用途。您必须使用对象模式。@KennethK。这一点都没有改变。@Servy我同意,但这个问题对我来说毫无意义。“我不能使用泛型,但我也不能使用object
。”
abstract class AbstractType
{
public abstract ??? Value { get; set; }
AbstractType FromValue(int i)
{
if (i == 0)
return new NumberType();
else
return new StringType();
}
}
class NumberType : AbstractType
{
public override double Value { get; set; }
}
class StringType : AbstractType
{
public override string Value { get; set; }
}