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; }
}